C/C++——ARM中断处理过程的函数调用解释

https://www.jianshu.com/p/52841b514868

ARM希望把中断处理函数也做成C函数的形式,一般C函数的处理过程类似了。
进入中断前,首先要把(R0-R3,R12,LR,PSR)保存起来,然后在中断结束后恢复它们。
这一切都是通过硬件完成的。
但是,中断的返回地址并没有像一般的C函数调用一样存储在LR中。(即LR放的不是前一个的PC,在中断发生时,当前的PC被存在了栈中,而不是LR中,LR被赋予了 新的功能;同时LR的值还是要被存入栈的,因为该函数也是要返回它自己的调用函数的)也就是说,中断过程中不但要像一般的C函数调用一样保存(R0-R3,R12,LR,PSR),还要保存中断返回地址(return address)。
中断的硬件机制会把EXC_RETURN放进LR,在中断返回时触发中断返回,而不是一般的C函数返回。

EXC_RETURN

如上文所说,LR在进入中断后通过硬件更新为EXC_RETURN。
EXC_RETURN位定义

EXC_RETURN为中断返回提供了更多的必要信息,如上表所示。

  1. bit4,表明了压入的是8个字,还是26个字。因为带浮点运算单元和不带浮点运算单元是有区别的
  2. bit3,表明是返回到Thread模式还是Handler模式。也就是该中断之前是从线程模式进入的,还是从中断中进入的(中断嵌套)。
  3. bit2 返回到哪个栈,是程序栈(Process Stack)还是主栈(Main Stack)。

在这里插入图片描述
图8.2是一个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值