嵌入式軟件開發(fā)之: 映像文件存儲器映射調(diào)整
為了實現(xiàn)圖13.9的存儲器映射,使用以下程序所現(xiàn)實的Scatter文件。
LOAD_ROM_1 0x0000 ;第一個加載時域的起始地址
{
EXEC_ROM_1 0x0000 ;第一個運行時域的起始地址
{
programl.o(+RO) ;放置program.o中所以的RO段
{
SRAM 0x9000 ;運行時域的起始地址
{
programl.o(+RW,+ZI) ;放置program.o中所有的RW和ZI段
}
}
LOAD_ROM_2 0x4000 ;第二個加載時域的起始地址
{
EXEC_ROM_2 0x4000 ;運行時域的起始地址
{
program2.o(+RO)
}
DRAM 0x18000 ;運行時域的起始地址
{
program2.o(+RW,+ZI)
}
}
上面兩個例子中,簡單存儲器映射可以使用命令行選項實現(xiàn),但第二個復(fù)雜存儲器映射的例子卻只能使用Scatter文件實現(xiàn)。
13.4.2 Scatter文件語法
分散載入描述文件是一個文本文件,它向 armlink 描述目標系統(tǒng)的存儲器映射。如果從命令行加載Scatter文件,可以使用任意類型的文件擴展名。
在Scatter文件中,用戶可以指定以下存儲器映像內(nèi)容:
· 每個載入?yún)^(qū)的載入地址和最大尺寸;
· 每個載入?yún)^(qū)的屬性;
· 從每個載入?yún)^(qū)派生的執(zhí)行區(qū);
· 每個執(zhí)行區(qū)的執(zhí)行地址和最大尺寸;
· 每個執(zhí)行區(qū)的輸入節(jié)。
描述文件的格式反映出載入?yún)^(qū)、執(zhí)行區(qū)和輸入節(jié)的層次結(jié)構(gòu)。
1.BNF的表示法和語法
所謂BNF(Backus Naur Format)即Scatter文件所用的形式語言。表13.3概括了其所用的符號和語法規(guī)則。
表13.3 BNF語法
符 號 | 說 明 |
” | 引號用于表示BNF語法中的字符被用作普通字符。 例如,定義B+C,它只能替換為模式B+C。而定義B+C可以替換為模式BC、BBC或BBBC |
A ::= B | 將A定義為B。例如,A::= B+ | C 表示A相當于B+或C。 在其組件方面,::=表示法用于定義高級結(jié)構(gòu)。每個組件可能還有一個::=定義,對更簡單的組件進行定義。 例如,A::=B以及B::= C | D表示定義A相當于模式C或D |
續(xù)表
符 號 | 說 明 |
[A] | 可選元素A。例如,A::= B[C]D 表示定義A可以擴展為BD或BCD |
A+ | 元素A可以出現(xiàn)一次或多次。例如,A::= B+表示定義A可以擴展為B、BB或BBB等 |
A* | 元素A可以不出現(xiàn)或多次出現(xiàn) |
A|B | 出現(xiàn)元素A或B,但不能同時出現(xiàn) |
(A|B) | 元素A和B組合在一起。 這在使用 | 操作符時,或重復(fù)復(fù)雜模式時尤其適用。 例如,A::=(B C)+ (D | E) 表示定義A可以擴展為BCD、BCE、BCBCD、BCBCE、BCBCBCD或BCBCBCE |
2.Scatter文件語法概述
分散加載描述scatter_description被定義為一個或多個load_region_description模式:
Scatter_description ::=
load_region_description+
加載域描述load_region_description 被定義為載入?yún)^(qū)名稱,可以選擇性地在其后跟隨屬性、尺寸說明符以及一個或多個執(zhí)行區(qū)描述:
load_region_description ::=
load_region_name (base_address | (+ offset)) [attributes] [max_size]
{
execution_region_description+
}
執(zhí)行域描述execution_region_description 被定義為執(zhí)行區(qū)名稱,是一種基址規(guī)范,可以選擇性地在其后跟隨屬性、尺寸說明符以及一個或多個輸入段描述:
execution_region_description ::=
exec_region_name (base_address | + offset) [attribute_list] [max_size | –
length]
{
input_section_description*
}
輸入段描述input_section_description被定義為源模塊選擇程序模式,可以在其后選擇性地跟隨輸入節(jié)選擇程序:
input_section_description ::=
module_select_pattern
[ (
(+ input_section_attr | input_section_pattern)
([,] + input_section_attr | , input_section_pattern))*
) ]
存儲器相關(guān)文章:存儲器原理
評論