<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è) > 嵌入式系統 > 設計應用 > 地址重映射在A(yíng)RM系統中的實(shí)現

地址重映射在A(yíng)RM系統中的實(shí)現

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

2.2 系統啟動(dòng)過(guò)程及Remap實(shí)現

系統的應該在系統的啟動(dòng)中完成,以下是的Remap啟動(dòng)過(guò)程。

①系統特殊寄存器的設置。主要是配置如上所述的用于實(shí)現地址空間和芯片內外存儲介質(zhì)映射的寄存器,在本系統中配置如下:

SYSCFG=0x87ffff90

EXTDBWTH=0x3001

ROMCON0=0x01000060

ROMCON1=0x13044060

DRAMCON0=0x11004060

②初始化系統堆棧。在A(yíng)RM7的體系結構中共有七種工作模式,不同的模式有不販堆棧指針,互不干擾。各模式對應于不販,至于哪些模式的堆棧需要初始化取決于用戶(hù)使用了哪些中斷,以及系統需要處理些異常類(lèi)型。一般來(lái)說(shuō),管理者(SVC)堆棧必須設置,如果使用了IRQ中斷,則IRQ堆棧也必須設置。有一點(diǎn)需要注意的是,為保證Remap后程序運行正常,所有堆棧應設置在RAM的高端地址中。

③初始化I/O口、UART、定時(shí)器、中斷控制器以及系統中所用到的其它資源。在初始化異常向量表或修改異常向量表中的入口地址前,要關(guān)掉所有中斷。


④異常向量表的初始化。將民常中煌怛處理程序的入口地址寫(xiě)入RAM中相應的異常向量。必須保證的是,異常向量表絕對不會(huì )被從ROM搬移到RAM中的代碼和數據所覆蓋,為此,異常向量表一般被定義在RAM中的高端地址中。

⑤程序代碼及數據的搬移。Remap后,RAM被映射到0x0000的地址空間,ROM則被移到高端地址上。為保證Remap后程序能夠瞠運行,ROM中的代碼和數據必須地址不變地被移到RAM中。這是Remap成功的關(guān)鍵。兩種途徑可以實(shí)現搬移。

一種是不管實(shí)際的代碼空間有多大,直接將ROM地址空間整個(gè)搬移到RAM中。當然,這種方法并不適合在真正的啟動(dòng)代碼中使用,但在做初步的Remap測試時(shí),可以用來(lái)檢驗堆棧及的設置是否合理。

另一種方法較復雜,它使用了SDT鏈接器ARMLink產(chǎn)生的定位信息,僅把RO風(fēng)吹草動(dòng)的有效代碼和數據段到RAM中。ARMLink將編譯后的程序鏈接成ELF文件。映像文件內部共有三種輸出段:RO段、RW段和ZI段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數據、可讀寫(xiě)的數據、初始化為0的數據,ARMLink同時(shí)還產(chǎn)生了這三種輸出段的起始和終止定位信息:Image$$RO$$Base、Image$$RO$$Limit、Image$$RW$$Base、Image$$Limit、Image$$Linit和Image$$ZI$$Limit??梢栽诔绦蛑惺褂眠@些定位信息。將ROM中的代碼和數據搬移到RAM中,其實(shí)現代碼如下:

數據定義:

BaseOfROM DCD Image$$RO$$Base

TopOfROM DCD Image$$RO$$Limit

BaseOfBSS DCD Image$$RW$$Base

BaseOfZero DCD Image$$ZI$$Base

EndOfBSS DCD Image$$ZI$$Limit

源程序:

;將ROM中的程序搬移到RAM中,重映射后的地址不變

adr r0,ResetEntry ;ROM中程序起始地址

mov r3,#(RamBaseAddr16) ;RamBaseAddr=0x100

Idr r1,BaseOfROM

Idr r2,TopOfROM

Add r1,r1,r3

Add r2,r2,r3

0

Idmia r0!,{r4-r11}

Stmia r1!,{r4-r11}

Cmp r1,r2

Bcc%B0

;將RW段中預初始化的變量搬移到RAM中

sub r1,r1,r2

sub r0,r0,r1 ;將r0指向RO段的結束,即RW段的開(kāi)始

ldr r1,BaseOfBSS

Idr r2,BaseOfZero

Add r1,r1,3

Add r2,r2,r3

1 ;基于局部標號的相對跳轉,PC+偏移地址,產(chǎn)生與位置無(wú)關(guān)的代碼

cmp r1,r2

ldrcc r4,[r0],#4

strcc r4,[r1],#4

bcc %B1



評論


相關(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>