定位PC=0xFFFFFFFE的HardFault,核心是区分‘取指异常’与‘栈回溯失效’。0xFFFFFFFE是Cortex-M的EXC_RETURN值,常因中断返回时LR被破坏(如栈溢出覆盖LR)或函数指针跳转错误导致。实操:1) 在HardFault_Handler中立即读取PSP/MSP、LR、PC,并保存现场;2) 用‘-fno-omit-frame-pointer’重编译,开启‘-g’;3) 在调试器中使用‘disassemble’查看0xFFFFFFFE附近,确认是否因跳转到无效地址;4) 重点检查中断服务函数中局部大数组或递归,用MPU或栈填充(0xDEADBEEF)检测溢出;5) 若使用RTOS,检查任务栈大小及中断嵌套是否压栈过多。建议先用‘__attribute__((naked))’的HardFault钩子打印调用栈,再结合map文件反查。
mcuku 阿沐 · 2026-08-27