<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è) > 嵌入式系統 > 設計應用 > ARM映像文件及其地址映射

ARM映像文件及其地址映射

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
1、什么是arm映像文件,

arm映像文件其實(shí)就是可執行文件,包括bin或hex兩種格式,可以直接燒到ROM里執行。在axd調試過(guò)程中,我們調試的是axf文件,其實(shí)這也是一種映像文件,它只是在bin文件中加了一個(gè)文件頭和一些調試信息。

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

映像文件一般由域組成,域最多由三個(gè)輸出段組成(RO,RW,ZI),輸出段又由輸入段組成。所謂域,指的就是整個(gè)bin映像文件所處在的區域,它又分為加載域和運行域。對于嵌入式系統而言,程序映象都是存儲在Flash存儲器等一些非易失性器件中的,而在運行時(shí),程序中的RW段必須重新裝載到可讀寫(xiě)的RAM中。簡(jiǎn)單來(lái)說(shuō),程序的加載時(shí)域就是指程序燒入Flash中的狀態(tài),運行時(shí)域是指程序執行時(shí)的狀態(tài)。一般來(lái)說(shuō)flash里的整個(gè)bin文件所在的地址空間就是加載域,當然在程序一般都不會(huì )放在flash里執行,一般都會(huì )搬到sdram里運行工作,它們在被搬到sdram里工作所處的地址空間就是運行域。我們輸入的代碼,一般有代碼部分和數據部分,這就是所謂的輸入段,經(jīng)過(guò)編譯后就變成了bin文件中ro段和rw段,還有所謂的zi段,這就是輸出段。在ARM的集成開(kāi)發(fā)環(huán)境中,只讀的代碼段和常量被稱(chēng)作RO段(ReadOnly);可讀寫(xiě)的全局變量和靜態(tài)變量被稱(chēng)作RW段(ReadWrite);RW段中要被初始化為零的變量被稱(chēng)為ZI段(ZeroInit)。對于加載域中的輸出段,一般來(lái)說(shuō)RO段后面緊跟著(zhù)RW段,RW段后面緊跟著(zhù)ZI段。在運行域中這些輸出段并不連續,但RW和ZI一定是連著(zhù)的。ZI段和RW段中的數據其實(shí)可以是RW屬性。

2、簡(jiǎn)單地址映射

對于比較簡(jiǎn)單的情況,可以在A(yíng)DS集成開(kāi)發(fā)環(huán)境的ARM LINKER選項output中指定RO Base和RW Base,即在simple模式下,告知連接器RO和RW的連接基地址。

這種模式下,ARM Linker會(huì )輸出以下符號,它們指示了在運行域中各個(gè)輸出段所處的地址空間,在使用的時(shí)候可以用IMPORT引入:

| Image$$RO$$Base|:表示RO段在運行域中的起始地址
|Image$$RO$$Limit|:表示RO區末地址后面的地址,即RW數據源的起始地址
|Image$$RW$$Base|:RW區在RAM里的執行區起始地址,也就是編譯器選項RW_Base指定的地址
|Image$$ZI$$Base|:ZI區在RAM里面的起始地址
|Image$$ZI$$Limit|:ZI區在RAM里面的結束地址后面的一個(gè)地址
RO Base對應的就是| Image$$RO$$Base|,RW Base對應的是|Image$$RW$$Base|,由于ZI段是包含在RW段里的,所以|Image$$RW$$Limit|就等于|Image$$ZI$$limit|。

下面給出一個(gè)例子,假設RO Base設為0x00000000,后面的RWBase地址是0x30000000,然后在Options選項中有Image entry point,是一個(gè)初始程序的入口地址,設為0x00000000,?,F在要做的就是將RW section移到以0x30000000開(kāi)始的地方,并且創(chuàng )造一個(gè)ZI section。
首先比較Image$$RO$$Limit和Image$$RW$$Base,如果相等,說(shuō)明execution view下RW section的地址和load view下RW section的地址相同,這樣,不需要移動(dòng)RW section;如果不等,說(shuō)明需要移動(dòng)RW section到它在execution view中的地方,把ROM里|Image$$RO$$Limt|開(kāi)始的RW初始數據拷貝到RAM里面|Image$$RW$$Base|開(kāi)始的地址,當RAM這邊的目標地址到達|Image$$ZI$$Base|后就表示RW區的結束和ZI區的開(kāi)始,接下去就對這片ZI區進(jìn)行清零操作,直到遇到結束地址|Image$$ZI$$Limit|

示例代碼如下:

IMPORT|Image$$RO$$Limit|

IMPORT|Image$$RW$$Base|

IMPORT|Image$$ZI$$Base|

IMPORT|Image$$ZI$$Limit|

IMPORTmain;聲明C程序中的Main()函數

AREAStart,CODE,READONLY;聲明代碼段Start

ENTRY;標識程序入口

CODE32;聲明32位ARM指令

ResetLDRSP,=0x40003F00

;初始化C程序的運行環(huán)境

LDRR0,=|Image$$RO$$Limit|;得到RW數據源的起始地址

LDRR1,=|Image$$RW$$Base|;RW區在RAM里的執行區起始地址

LDRR3,=|Image$$ZI$$Base|;ZI區在RAM里面的起始地址

CMPR0,R1;檢查RW section的地址在load view和execution view下是否相等

BEQLOOP1;如果相等就不移動(dòng)RW section,直接建立ZI scetion

LOOP0;否則就copy RW section到execution view下指定的地址

CMPR1,R3

LDRCCR2,[R0],#4;它把從R0中的地址開(kāi)始的section copy到R1中的地址開(kāi)始的section

STRCCR2,[R1],#4

BCCLOOP0

LOOP1

LDRR1,=|Image$$ZI$$Limit|;ZI section末地址

MOVR2,#0;將ZI section需要的初始化量裝入R2

LOOP2

CMPR3,R1;建立并初始化ZI section

STRCCR2,[R3],#4

BCCLOOP2

Bmain;跳轉到C程序代碼Main()函數

END

注:LDRCCR2,[R0],#4;將地址為R0的內存單元數據讀取到R2中,然后R0=R0+4

CC(小于)為條件碼。



關(guān)鍵詞: ARM映像文件地址映

評論


技術(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>