Arm Cortex-M 处理器异常处理机制详解
1. 异常序列介绍
1.1 异常入口准备
在异常处理程序启动前,根据使用的栈(主栈指针 MSP 或进程栈指针 PSP),相应的栈指针值会被调整。程序计数器(PC)会更新为异常处理程序的起始地址,链接寄存器(LR)会被更新为一个特殊值 EXC_RETURN。这个 32 位的 EXC_RETURN 值,其高 25 位被设置为 1,低 7 位的部分用于保存异常序列的状态信息,例如使用了哪个栈进行压栈操作。该值将在异常返回时使用。
1.2 异常处理程序执行
在异常处理程序内部,通过软件操作来处理触发中断请求的外设。处理器在执行异常处理程序时处于处理模式(Handler mode),在这种模式下:
- 主栈指针(MSP)用于栈操作。
- 处理器以特权访问级别执行。
如果在这个阶段有更高优先级的异常到来,新的中断将被接受,当前正在执行的处理程序将被挂起,并被更高优先级的处理程序抢占,这种情况称为嵌套异常。如果是相同或更低优先级的异常到来,新到来的异常将处于待处理状态,直到当前异常处理程序完成后才会被处理。
当异常处理程序完成时,程序代码执行返回操作,这会使 EXC_RETURN 值被加载到程序计数器(PC)中,从而触发异常返回机制。
1.3 异常返回序列
在某些处理器架构中,使用特殊指令进行异常返回,但这意味着异常处理程序不能像普通 C 代码那样编写和编译。在 Arm Cortex - M 处理器中,使用 EXC_RETURN 值触发异常返回机制。该值在异常入口序列中生成,并存储在链接寄存器(LR)中。当使用允许
超级会员免费看
订阅专栏 解锁全文
43

被折叠的 条评论
为什么被折叠?



