微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > ARM的启动代码(3):异常向量

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内的地址绝对跳转。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top