<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式軟件開(kāi)發(fā)之: 映像文件存儲器映射調整

嵌入式軟件開(kāi)發(fā)之: 映像文件存儲器映射調整

作者: 時(shí)間:2013-09-30 來(lái)源:網(wǎng)絡(luò ) 收藏

本文引用地址:http://dyxdggzs.com/article/257027.htm

2.為執行域確定固定地址

可以在執行區描述中使用FIXED屬性來(lái)創(chuàng )建根區,該根區在固定地址載入和執行。

FIXED可以用于在單一加載域內(因此通常用于單個(gè)ROM設備)創(chuàng )建多個(gè)根區。

例如,使用FIXED屬性將函數或數據塊(如常數表或校驗和)放在ROM中的固定地址,這樣就可以使用指針很方便的對其進(jìn)行訪(fǎng)問(wèn)。

下面的例子顯示了如何放置單個(gè)目標內容。

LOADREG1 0x0 0x10000

{

EXECREG1 0x0 0x1000 ;啟動(dòng)域,包含初始化代碼

{ ;將初始化代碼放在0x0地址

init.o (Init, +FIRST)

* (+RO) ;隨后排放余下的只讀數據

}

RAM 0x400000 0x2000 ;將可讀可寫(xiě)數據放在0x400000地址

{

* (+RW +ZI)

}

DATABLOCK 0x4FF00 FIXED 0xFF ;執行域放在 0x4FF00地址

{ ;限制該域的最大長(cháng)度為 0xFF

data.o(+RO-DATA) ;將只讀數據放在0x1FF00 和 0x1FFFF之間

}

}

通過(guò)上面的Scatter文件,可以將初始化代碼放在0x0處,其后是其他RO代碼和除了data.o對象中的RO數據之外的所有RO數據;所有全局的RW變量放在RAM中0x400000處;最好將data.o的RO-DATA只讀數據表放在地址0x4FF00處,并指定其最大長(cháng)度為0xFF。

上例將代碼或數據對象放在其各自的源文件中,然后放置目標文件域,這些操作方式是ARM公司建議的標準編碼方式。為方便起見(jiàn),可以使用編譯指示#pragma和分散載入描述文件放置已命名的域。下面的例子創(chuàng )建模塊dump.c并顯式命名域。

// file dump.c

int a = 10; // 放入數據域

short b[100]; // 放入bss段

int const c[3] = {1,2,3}; // 放入.constdata段

int func1(int a) {return a*1;} // 放入.text段

#pragma arm section rwdata = foo, code =foo

int x = 5; // 在foo的數據域

char *s = abc; // s3在code段, abc 在 .constdata

int func2(int x) {return x+1;} // 放入foo的.text段

#pragma arm section code, rwdata // 返回

使用下面的Scatter文件指定上面的代碼在內存中的放置位置。如果代碼和數據段的名稱(chēng)相同,則首先放置代碼段。

FLASH 0x10000000 0x2000000

{

FLASH 0x10000000 0x2000000

{

init.o (Init, +First) ; 放置初始化代碼

* (+RO) ;

}

RAM 0x0000

{

vectors.o (Vect, +First) ; 放置向量表

* (+RW,+ZI) ;

}

DUMP 0x08000000

{

dump.o (foo) ;

}

}

通過(guò)上面的Scatter文件,將init中的初始化段放在0x10000000地址,并將除foo外的只讀數據func1和c[]放在該初始段的后面;接下來(lái)的執行域RAM放置向量表;最后的DUMP域放置由#pragma指定的段dump。

存儲器相關(guān)文章:存儲器原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>