<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ò ) 收藏

;接著(zhù)把ZI段搬移到RAM中,并其將初始化為0

mov r0,#0

Idr r2,EndOfBSS

Add r2,r2,r3

2

cmp r1,2

strcc r0,[r1],#4

bcc%B2

⑥地址的重新映射。中的Remap過(guò)程其實(shí)很簡(jiǎn)單,只需重新設置ROMCON0~ROMCON5和DRAMCON0~DRAMCON3。在本系統中只需重新設置ROMCON0和DRAMCON0。

源代碼:

;/*內存控制寄存器重新設置-存儲空間重新映射地址空間*/

EXPORT RemapMemory

RemapMemory

mov r12,r14

adr r0,RemapMem

ldmia r0,{r1-r11}

ldr r0,=ROMCON0 ;ROMCON0為Bank寄存器的起始地址

stmia r0,{r1-r11}

bl ExceptionTalbeInit ;中斷向量表重新初始化

mov pc,r12

RemapMem

DCD 11040060 ;/*ROMCON0 0x1000000~0x1100000*/

DCD 10000398 ;/*DRACON0 0x0~0x1000000*/

⑦進(jìn)入C代碼空間,開(kāi)始主程序的運行。此時(shí)代碼應該運行于RAM中。


上面的步驟可以根據實(shí)際需要進(jìn)行適當的添加或刪節。值得注意的是:匯編生成的代碼應該是與位置無(wú)關(guān)的代碼,即代碼在運行期間可以被映射到不同的地址空間,其中的跳轉指令都是基于PC寄存器的相對跳轉指令?;赑C的標號是位于目標指令前或者程序中數據定義偽操作前的標號,這種符號在匯編時(shí)將被處理成PC值加上或減去一個(gè)數字常量。

3 的處理

在Remap的啟動(dòng)代碼中,需要特別注意的是的處理。在中,的入口地址是固定的,按表1次序排列。

表1

異常類(lèi)型工作模式正常地址
復位管理0x00000000
未定義指令未定義0x00000004
軟件中斷(SWI)管理0x00000008
預取中止中止0x0000000
數據中止中止0x00000010
預留-0x00000014
IRQ(中斷)IRQ0x00000018
FIQ(快速中斷)FIQ0x0000001

地址重新映射之后,入口地址被映射到RAM中,中斷處理代碼也被搬移到RAM地址空是。此時(shí),中斷響應和中斷處理的速度都將大大加快,這將有利于提高整個(gè)系統的實(shí)時(shí)性。異常中斷向量表的設計結構如圖3所示。

下面是各部分的源代碼(以IRQ異常中斷為例)。

異常向量表的定義:(系統初始化時(shí),將異常處理代碼入口地址寫(xiě)入異常中的向量表)

_RAM_END_ADDR EQU 0x01000000 ;重映射后RAM的終止地址

MAP (_RAM_END_ADDR-0x100)

SYS_RST_VECTOR # 4

UDF_INS_VECTOR # 4

SWI_SVC_VECTOR # 4

INS_ABT_VECTOR # 4

DAT_ABT_VECTOR # 4

RESERVED_VECTOR # 4

IRQ_SVC_VECTOR # 4

FIQ_SVC_VECTOR # 4

異常初始化代碼:

b IRQ_SVC_HANDLER ;0x18

IRQ_SVC_HANDLER

SUB sp,sp,#4 ;滿(mǎn)遞減堆棧

STMFD sp!,{r0}

LDR r0,=IRQ_SVC_VECTOR ;讀取中斷向量,

;IRQ_SVC_VECTOR=SystemrqHandle

LDR r0,[r0]

STR r0,[sp,#4]

LDMFD sp!,{r0,pc};跳轉到異常中斷處理代碼入口

異常處理入口代碼:

SystemIrqHandler

IMPORT ISR_IrqHandler

STMFD sp!,{r0-r12,lr}

BL ISR_IrqHandler ;跳轉到C代碼中異常中斷處理程序ISR_IrqHandler

LDMFD sp!,{r0-r12,lr}

SUBS pc,lr,#4

在如上的結構中,不管系統是否進(jìn)行了地址的重映射,異常中斷向量都可以在運行時(shí)動(dòng)態(tài)改變,大大提高了中斷處理中的靈活性。中斷向量可以在運行時(shí)指向不同的異常處理代碼入口。

結語(yǔ)

面對實(shí)時(shí)性要求越來(lái)越高的各種應用,不管應用中有沒(méi)有嵌入式操作系統,Remap都已經(jīng)成為啟動(dòng)代碼中必不可少的一部分。Remap的實(shí)現對于操作系統的移植也有重要的意義。Remap決定了系統啟動(dòng)的效率,并對整個(gè)系統的實(shí)時(shí)性和穩定性產(chǎn)生很大影響。因而,對Remap過(guò)程的理解和設計,對于那些嵌入式系統的開(kāi)發(fā)人員來(lái)說(shuō)是非常重要的,它從一開(kāi)始就決定了整個(gè)開(kāi)發(fā)過(guò)程的最終成敗。


上一頁(yè) 1 2 3 下一頁(yè)

評論


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