Cortex-M处理器故障异常解析与处理策略
1. 处理器总线错误特性
在Cortex - M23和Cortex - M33处理器中,不存在内部缓存和内部写缓冲区。因此,通过执行数据访问指令接收到的总线错误始终是同步的。若存在系统级缓存,缓存单元通常会以中断信号的形式将异步总线错误反馈给处理器。
2. 各类故障异常原因
2.1 使用故障(Usage Faults)
使用故障异常可能由多种原因引发:
- 执行未定义指令,例如在浮点单元禁用或不存在时执行浮点指令。
- 执行协处理器指令或Arm自定义指令。Cortex - M33支持这些指令,但要成功执行,指令指定的协处理器或硬件加速器必须存在、启用且不向处理器返回错误响应,否则触发使用故障;Cortex - M23不支持协处理器和Arm自定义指令。
- 尝试切换到Arm状态。经典Arm处理器(如Arm7TDMI®)支持Arm和Thumb指令集,而Cortex - M处理器仅支持Thumb ISA,从经典Arm处理器移植的软件可能包含切换到Arm状态的代码,需更新才能在Cortex - M处理器上运行。
- 异常返回序列中出现无效的EXC_RETURN代码,例如尝试返回线程级,但栈帧中堆叠的IPSR非零(即仍有其他异常处于活动状态)。
- Cortex - M23处理器上的未对齐内存访问,或在Armv8 - M主线处理器(如Cortex - M33)中使用未对齐地址进行多加载或多存储指令(包括双加载和双存储)。
- 异常返回时未堆叠的xPSR中存在可中断继续指令(ICI)位,但异常返回后执行的指令不是多加载/存储指令。
- 违反栈限制检查
超级会员免费看
订阅专栏 解锁全文
59

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



