<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

13.4.4 等效的簡(jiǎn)單映像分散載入描述

前面介紹了的命令行選項,如-ro-base、-rw-base、-reloc、-split、-ropi和-rwpi。但在實(shí)際編程時(shí),因為使用Scatter文件可以產(chǎn)生更清晰的內存映像視圖,所以最好使用Scatter文件對映像進(jìn)行加載。

本節詳細介紹如何將各的命令行選項,替換為Scatter文件。

1.-ro-base address選項的替換

使用-ro-base address命令行鏈接產(chǎn)生的內存映像由一個(gè)加載域和三個(gè)執行域組成。執行域放在存儲器映像中的相鄰位置。

選項中的address指定了加載域和第一個(gè)執行域的起始地址(加載域和第一個(gè)執行域的起始地址相同)。

下面的例子顯示了與“-ro-base 0x8000”命令行選項等價(jià)的Scatter文件。

LOADREG 0x8000 ;定義加載域的起始地址0x8000

{ ;

ROM +0 ;定義第一個(gè)執行域的起始地址,該地址與加載域的起始地址相同,為0x8000

;

{

*(+RO) ;該域放置所有的RO段

}

RAM_RW +0 ;定義第二個(gè)執行域,起始地址為0x8000+ROM段大小

;

{

*(+RW) ;將所有的RW代碼放置在該段

}

RAM_ZI +0 ;定義ZI段

;ZI段的起始地址為0x8000+ROM段的大小+RAM_RW段的大小

;

{

*(+ZI) ;放置所有的ZI段

}

}

上例中的Scatter文件創(chuàng )建的映像由一個(gè)加載域和三個(gè)執行域組成。加載域的起始地址為0x8000。三個(gè)執行域分別為ROM、RAM_RW和RAM_ZI,它們分別包含RO、RW和ZI輸出段。RO和RAM_RW為啟動(dòng)域,RAM_ZI在執行時(shí)動(dòng)態(tài)創(chuàng )建。ROM的執行地址是0x8000,通過(guò)對執行區描述使用+offset格式的基址指定程序,所有三個(gè)執行域在中相鄰放置,即前一個(gè)執行域的末尾放置后一個(gè)執行域。

如果鏈接程序時(shí),將-ro-base選項和-ropi混合使用,則可以生成位置無(wú)關(guān)代碼。

下面的例子顯示了與-ro-base 0x8000 -ropi等效的Scatter文件。

LOADREG 0x8000 PI ;加載域的地址為0x8000,并指定該加載域的屬性為PI

{

ROM +0 ;第一執行域的地址為0x8000,而且該執行域繼承了加載域的PI屬性

;所有該域的執行地址是可變的

{

*(+RO) ;放置所有的RO段

}

RAM_RW +0 ABSOLUTE ;使用ABSOLUTE屬性代替PI屬性

{

*(+RW) ;放置RW段

}

RAM_ZI +0

{

*(+ZI)

}

}

執行域ROM從LOADREG加載域繼承 PI 屬性。下一個(gè)執行域 RAM_RW 被標記為 ABSOLUTE 所以其不再具有PI屬性。另外,因為RAM_ZI 域使用了+0的偏移量,所以它從 RAM_RW域繼承 ABSOLUTE 屬性。

2.-ro-base和-rw-base選項的替換

使用-ro-base和-rw-base選項鏈接的映像也由一個(gè)加載域和三個(gè)執行域組成,它與類(lèi)型1生成的映像十分相似,只是此類(lèi)映像的RW執行區與RO執行區不相鄰。

在-ro-base選項中指定加載域的起始地址,在-rw-base選項中指定執行域的地址。

下面的例子顯示與使用-ro-base 0x8000 -rw-base 0x040000等效的分散載入描述。

LOADREG 0x8000 ;定義加載域的起始地址為0x8000

{

ROM_RO +0 ;定義第一個(gè)執行域的起始地址為0x8000

{

* (+RO) ;在該域中放置所有的RO段

}

RAM_RW 0x040000 ;第二個(gè)執行域名為RAM_RW,起始地址為0x40000

{

* (+RW) ;放置所有的RW段

}

RAM_ZI +0

{

* (+ZI) ;放置所有的ZI段

}

}

該Scatter文件創(chuàng )建的映像有一個(gè)名為L(cháng)OADREG的加載域,載入地址是0x8000。該映像有3個(gè)執行區,分別為ROM、RAM_RW和RAM_ZI,它們分別包含RO、RW和ZI輸出段。其中,RO域是啟動(dòng)域,執行地址是0x8000,RAM_RW執行域與第一個(gè)執行域RAM_RW不相鄰。其執行地址是0x040000。緊隨其后的執行區RAM_ZI放置所有的ZI數據。

另外,也可以將-rw-base和位置無(wú)關(guān)選項-rwpi配合使用,將RW輸出節的執行區標記為位置獨立。

下面的例子顯示了使用-ro-base 0x8000 -rw-base 0x40000 -rwpi等效的Scatter文件。

LOADREG 0x0x8000 ;定義加載域的起始地址為0x8000

{

ROM +0 ;定義第一執行域,其起始地址為0x8000

{

*(+RO) ;放置所有RO段

}

RAM_RW 0x40000 PI ;設置第二執行域的屬性為PI屬性

{

*(+RW)

}

ER_ZI +0 ;繼承了PI屬性

{

*(+ZI)

}

}

第一個(gè)執行域ROM從加載域LOADREG繼承ABSOLUTE屬性。第二個(gè)執行區RAM_RW標記為PI屬性。另外,因為ER_ZI區的偏移為+0,所以它從RAM_RW區繼承PI屬性。

存儲器相關(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>