ARM的启动代码(3):异常向量
时间:11-10
来源:互联网
点击:
mforthevectorsandfunctionpointers*/
arm_exception_table=.;
.+=64;
连接器虽然把位置空出来了,但连接器依然不知道将vector_block放到什么位置。怎么办?这里的代码解释了一切。
/*
*InitializetheMMU.Afterwereturn,theMMUisenabled,
*andmemorymayberemapped.Ihopewedontremapthis
*memoryaway.
*/
ldrr0,=mem_map
blmmu_init
/*
*Initializetheexceptionvectors.Thisincludesthe
*exceptionsvectors(0x00000000-0x0000001c),andthe
*pointerstotheexceptionhandlers(0x00000020-0x0000003c).
*/
movr0,#0
adrr1,vector_block
ldmiar1!,{r2-r9}
stmiar0!,{r2-r9}
ldmiar1!,{r2-r9}
stmiar0!,{r2-r9}
Gnu的工具链并不针对某一个具体的平台。所以解决方案从某种意义上说,更具有普遍意义。先调用mmu_init,这是干什么,实际上是将MMU初始化,将我们定义的.base地址放到0x0位置去。然后紧接着下面的几行代码,是将上面的中断向量到0x0位置去。一共64个字节,实现4GB内的地址绝对跳转。
ARM启动代码异常向 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)