ARMv7-M异常分析 1. 异常分析流程 LR寄存器,判断使用PSP还是MSP 获取PSP/MSP 读取栈指针指向的内存 分析异常发生时,栈的状态。栈帧中的PC可以获取异常发生的位置 结合map文件、反编译文件,确定异常发生的原因。 是否是否是否进入 Fault Handler读取 LR 获取 EXC_RETURN 值LR.bit2 == 1?异常前使用 PSP异常前使用 MSP读取 MSP 值LR.bit4 == 1?扩展栈帧(浮点上下文)栈指针需额外偏移标准栈帧(8字自动压栈)SP 直接指向栈帧基址按顺序提取栈帧内容R0,R1,R2,R3,R12,LR,PC,xPSR解析关键字段PC:定位触发异常的指令xPSR.IPSR:判断异常前是否在中断中栈帧 LR:获取异常前调用返回地址结合反汇编 / Map 文件定位源码IPSR != 0?异常发生在中断服务程序中检查对应 ISR 代码异常发生在线程模式回溯调用链辅助定位错误传递路径可选:读取 SCB->CFSR细分 MemManage/BusFault/UsageFault综合 PC、xPSR、CFSR 等信息确定异常根本原因