新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 地址重映射在ARM系统中的实现

地址重映射在ARM系统中的实现

作者:时间:2013-04-12来源:网络收藏

;接着把ZI段搬移到RAM中,并其将初始化为0

mov r0,#0

Idr r2,EndOfBSS

Add r2,r2,r3

2

cmp r1,2

strcc r0,[r1],#4

bcc%B2

⑥地址的重新映射。中的Remap过程其实很简单,只需重新设置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*/

⑦进入C代码空间,开始主程序的运行。此时代码应该运行于RAM中。


上面的步骤可以根据实际需要进行适当的添加或删节。值得注意的是:汇编生成的代码应该是与位置无关的代码,即代码在运行期间可以被映射到不同的地址空间,其中的跳转指令都是基于PC寄存器的相对跳转指令。基于PC的标号是位于目标指令前或者程序中数据定义伪操作前的标号,这种符号在汇编时将被处理成PC值加上或减去一个数字常量。

3 的处理

在Remap的启动代码中,需要特别注意的是的处理。在中,的入口地址是固定的,按表1次序排列。

表1

异常类型工作模式正常地址
复位管理0x00000000
未定义指令未定义0x00000004
软件中断(SWI)管理0x00000008
预取中止中止0x0000000
数据中止中止0x00000010
预留-0x00000014
IRQ(中断)IRQ0x00000018
FIQ(快速中断)FIQ0x0000001

地址重新映射之后,入口地址被映射到RAM中,中断处理代码也被搬移到RAM地址空是。此时,中断响应和中断处理的速度都将大大加快,这将有利于提高整个系统的实时性。异常中断向量表的设计结构如图3所示。

下面是各部分的源代码(以IRQ异常中断为例)。

异常向量表的定义:(系统初始化时,将异常处理代码入口地址写入异常中的向量表)

_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 ;满递减堆栈

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

在如上的结构中,不管系统是否进行了地址的重映射,异常中断向量都可以在运行时动态改变,大大提高了中断处理中的灵活性。中断向量可以在运行时指向不同的异常处理代码入口。

结语

面对实时性要求越来越高的各种应用,不管应用中有没有嵌入式操作系统,Remap都已经成为启动代码中必不可少的一部分。Remap的实现对于操作系统的移植也有重要的意义。Remap决定了系统启动的效率,并对整个系统的实时性和稳定性产生很大影响。因而,对Remap过程的理解和设计,对于那些嵌入式系统的开发人员来说是非常重要的,它从一开始就决定了整个开发过程的最终成败。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭