嵌入式軟件開發(fā)之: 映像文件存儲(chǔ)器映射調(diào)整
圖13.10顯示一個(gè)典型的分散載入描述文件的內(nèi)容和組織結(jié)構(gòu)。
圖13.10 典型的分散載入描述文件的內(nèi)容和組織結(jié)構(gòu)
3.加載域描述
一個(gè)加載域具有以下屬性:
· 名稱:鏈接程序使用它識(shí)別不同的加載域;
· 基址:載入視圖中的代碼和數(shù)據(jù)的起始地址;
· 屬性:可選;
· 最大尺寸:可選;
· 執(zhí)行區(qū)列表:這些執(zhí)行區(qū)標(biāo)識(shí)執(zhí)行視圖中模塊的類型和位置。
圖13.11顯示了加載域的描述。
BNF語法為:
load_region_description ::=
load_region_name (base_address | (+ offset)) [attribute_list] [ max_size
]
{
execution_region_description+
}
語法說明如下。
① load_region_name為加載域的名稱。只有前31個(gè)字符有效。該名稱僅用于識(shí)別每個(gè)域。
注意 | load_region_name與執(zhí)行域exec_region_name不同,load_region_name不用于生成Load$$region_ |
② base_address是區(qū)中對(duì)象的鏈接地址。base_address必須是一個(gè)字對(duì)齊數(shù)值。
③ +offset描述基址,它從前一個(gè)加載域的末尾偏移offset個(gè)字節(jié)。offset的值必須能被4整除。如果是第一個(gè)加載域,則+offset表示該域的基地址是從0之后的offset字節(jié)開始。
④ attribute_list指定加載域內(nèi)容的屬性:
· PI:位置獨(dú)立;
· RELOC:可重定位;
· OVERLAY:重疊;
· ABSOLUTE:絕對(duì)地址;
· NOCOMPRESS:代碼不被壓縮。
可以指定這些屬性中的一項(xiàng)(除NOCOMPRESS外,其他4項(xiàng)屬性為互斥關(guān)系)。默認(rèn)的加載域?qū)傩允茿BSOLUTE。具有PI、RELOC或OVERLAY屬性之一的加載域可以有重疊的地址范圍。對(duì)于ABSOLUTE加載域,armlink不允許重疊的地址范圍。OVERLAY關(guān)鍵字允許在同一個(gè)地址有多個(gè)執(zhí)行區(qū)。
注意 | ARM在RVCT中不提供重疊機(jī)制。要在同一個(gè)地址使用多個(gè)執(zhí)行區(qū),必須提供自己的重疊管理程序。 |
⑤ max_size:它指定加載域的最大尺寸。(如果指定了可選的max_size值,但分配給該區(qū)的字節(jié)超過max_size字節(jié),armlink將生成錯(cuò)誤。)
⑥ execution_region_description:它指定執(zhí)行區(qū)名稱、地址和內(nèi)容。
4.執(zhí)行域描述符
執(zhí)行域具有以下一些屬性:
·
域名稱;
· 執(zhí)行域基地址(支持絕對(duì)地址的或相對(duì)地址的);
· 執(zhí)行域的最大尺寸(可選);
· 指定執(zhí)行域?qū)傩裕?/p>
· 一個(gè)或多個(gè)輸入段描述(放在本執(zhí)行區(qū)中的模塊)。
圖13.12顯示了一個(gè)典型的執(zhí)行域描述。
執(zhí)行域描述符中的BNF語法為:
execution_region_description ::=
exec_region_name (base_address | + offset) [attribute_list] [max_size | –
length]
{
input_section_description+
}
其語法說明如下。
① exec_region_name 為執(zhí)行域命名。(只有前31個(gè)字符有效。)
② base_address是域中對(duì)象的鏈接地址。base_address必須是字對(duì)齊的。
③ +offset是描述基址,它從前一個(gè)執(zhí)行區(qū)的末尾偏移offset個(gè)字節(jié)。offset的值必須能被4整除。如果前面沒有執(zhí)行區(qū)(即,這是載入?yún)^(qū)中的第一個(gè)執(zhí)行區(qū)),則+offset表示基址從它所在的載入?yún)^(qū)的基址之后offset個(gè)字節(jié)開始。如果使用+offset格式并且所在的加載域具有RELOC屬性,則執(zhí)行區(qū)繼承該RELOC屬性。但是,如果使用固定的base_address,則隨后出現(xiàn)的offset不繼承RELOC屬性。
④ attribute_list指定執(zhí)行區(qū)內(nèi)容的屬性:
· PI:位置獨(dú)立。
· OVERLAY:重疊。
· ABSOLUTE:絕對(duì)地址。域的執(zhí)行地址由base_designator指定。
· FIXED:固定地址。執(zhí)行域的加載地址和執(zhí)行地址都由base_designator指定。base_designator必須是絕對(duì)基址,或者偏移量為+0。
· EMPTY:它在執(zhí)行區(qū)中保留一個(gè)已知長(zhǎng)度的空白存儲(chǔ)器塊,通常用作堆或棧。
· PADVALUE:指定填充字的默認(rèn)值,如果在域定義中指定了該屬性,則必須為該屬性賦值。使用該屬性的例子如下。
EXEC 0x10000 PADVALUE 0xffffffff EMPTY ZEROPAD 0x2000
存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理
評(píng)論