arm linux中断的理解

arm中断后,硬件会自动跳到中断向量表(这里注意是自动)。中断向量表是放在0地址开始的位置,如下表所示。
在这里插入图片描述
如上电时,程序会跳到0x00000000处执行,然后在该处放一条跳转指令,跳转到中断服务函数,如B Reset。然后在中断服务函数中处理。
中断发生后,当然要保存现场,否则中断处理函数会破坏被中断之前的寄存器。哪些寄存器需要保存?淡然已经使用了的寄存器需要保存,但是想要弄清楚哪些寄存器需要保存也不是件容易的事情。那么偷懒的办法就是保存所有的寄存器,下图所示是arm寄存器。如发生SWI中断,那么就保存r0~r12,r13_svc为该中断模式下专用寄存器,所以在该模式下会使用这个寄存器,不会使用中断发生前的工作模式下的r13,故原来模式下的r13就无需保存。r13要重新给一个地址,它是SVC模式下的栈地址,是独立于中断前的栈地址。r14_svc中保存了中断前下一条指令的地址,所以也要保存起来,否则,在中断处理函数中可能会被破坏。cpsr的值保存到spsr_svc中。这些寄存器的保存可以用一条指令实现:stmdb sp!,{r0-r12,lr}。中断处理完后,需要恢复这些寄存器,也可以用一条指令来实现:ldmia sp!,{r0-r12,pc}表示将spsr_svc恢复到cpsr中。

总结两点:1发生中断或异常后,处理器自动跳到向量表中相应地址 2进入中断要保存现场,中断处理后恢复现场。在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值