初级会员

- 积分
- 61
- 金钱
- 61
- 注册时间
- 2019-1-23
- 在线时间
- 19 小时
|
1金钱
本帖最后由 可怕派 于 2019-11-5 17:43 编辑
新人看原子哥教程时有惑,为什么下面一连串的“ldr pc”指令是创建一个向量表(即将以下的中断函数的地址放在内存相应的地方),我对于下面这几行代码的理解是“ldr pc”指令用于跳到相应的函数去执行,而不是将中断函数的地址放在内存某个位置形成一个中断向量表,求解?,而且pc寄存器不是会被覆盖吗?
_start:
ldr pc, =Reset_Handler /* 复位中断 */
ldr pc, =Undefined_Handler /* 未定义中断 */
ldr pc, =SVC_Handler /* SVC(Supervisor)中断 */
ldr pc, =PrefAbort_Handler /* 预取终止中断 */
ldr pc, =DataAbort_Handler /* 数据终止中断 */
ldr pc, =NotUsed_Handler /* 未使用中断 */
ldr pc, =IRQ_Handler /* IRQ中断 */
ldr pc, =FIQ_Handler /* FIQ(快速中断)未定义中断 */
|
最佳答案
查看完整内容[请看2#楼]
前8个地址是异常入口,这些异常入口都对应这指定的异常,这个是CPU定义好的。当异常发生(中断)的时候就会直接跳转到这些地址处,然后运行这些地址出对应的指令,比如复位中断的话就是0x0地址,然后0x0地址出的指令就是ldr pc,=Rest_Handler,也就是向pc寄存器加载Reset_Handler函数地址,不就是跳转到Reset_Handler函数了吗?
|