目的:
提供一种能够解决Fault问题的方法
硬件环境:
STM32F103
软件环境:
无操作系统
问题复现:
在代码处执行*((u32*)0x3) = 9;
问题现象:
代码挂死在下面的位置处。
解决方法:
1:查看当前通用寄存器的值见下图
2:关注LR的值为0xFFFFFFF9,根据下图解析其含义
说明问题,发生在主线程中,并且使用的栈寄存器为MSP
3:从MSP中读出SP的值为0x200008D8,并从该地址处往上读至少32字节数据,并解析
4:所以可以得到出错前,PC的值为0x0800022E,由于流水线的作用,PC-4的值才是真正出错的地址为0x0800022A
5: 打开汇编文件,定位位置0x0800022A见下图,刚好和重现复现代码吻合
注:
1:本例根本原因是由于bus faults导致的,详见Cortex-M3参考手册