Arm Cortex-M处理器中断与异常处理详解
1. 延迟堆叠(Lazy Stacking)
在某些指令执行时,会触发延迟堆叠机制。该机制会使流水线暂停,并将浮点寄存器压入已分配的栈空间。若中断处理程序未使用浮点单元(FPU),处理器在出栈阶段会跳过FPU寄存器的出栈操作。通过利用延迟堆叠特性,大多数不使用FPU的中断或异常处理能够省略FPU寄存器的保存和恢复过程,从而实现更快速的服务。
2. 堆叠和出栈使用的栈指针
中断的后台线程或进程所使用的栈指针用于堆叠和出栈操作。这取决于处理器的安全状态、处理器模式(即是否正在执行异常/中断处理程序)以及CONTROL.SPSEL的设置。栈指针的选择方式如下表所示:
| 处理器状态 | CONTROL_S.SPSEL = 0(默认) | CONTROL_S.SPSEL = 1 | CONTROL_NS.SPSEL = 0(默认) | CONTROL_NS.SPSEL = 1 |
| — | — | — | — | — |
| 处理模式(Handler mode) | MSP_S | MSP_S | MSP_NS | MSP_NS |
| 线程模式(Thread mode) | MSP_S | PSP_S | MSP_NS | PSP_NS |
3. EXC_RETURN机制
Cortex - M处理器允许将中断处理程序编写为C函数。在C函数中,函数返回通常是通过将返回地址(函数调用时加载到LR中)加载到PC(程序计数器)来实现的,例如执行“BX LR”指令。那么,当中断处理程序执行返回操作时,处理器如何知道这是一个异常返回(触发出栈操作,而非正常的函
超级会员免费看
订阅专栏 解锁全文
48

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



