Cortex-M 异常栈为什么要关注 8 字节对齐和对齐填充?
ABI 和异常模型可能要求异常入口保持 8 字节栈对齐;若被打断时 SP 未对齐,硬件可在栈帧中加入填充并用 xPSR 标记。手工解析或汇编上下文切换若忽略该位,会错认寄存器和返回位置。
Question Bank
按知识、方向与难度筛选;每道题都有分层回答和工程追问。
ABI 和异常模型可能要求异常入口保持 8 字节栈对齐;若被打断时 SP 未对齐,硬件可在栈帧中加入填充并用 xPSR 标记。手工解析或汇编上下文切换若忽略该位,会错认寄存器和返回位置。
异常进入后 LR 可保存特殊 EXC_RETURN 编码,它告诉处理器返回 Thread 还是 Handler Mode、使用 MSP 还是 PSP,以及栈帧是否含浮点上下文。执行异常返回序列时硬件据此自动出栈,而不是跳到该数值地址。
PRIMASK 屏蔽可配置优先级异常;BASEPRI 只屏蔽达到某一优先级阈值及更低紧急度的异常;FAULTMASK 屏蔽范围更强,只留下 NMI。不同 Cortex-M 型号支持情况不同,修改后必须按原值恢复。
从 HFSR/CFSR 到 MMFAR/BFAR、压栈 PC/LR 和反汇编建立可重复的定位流程。