作者:mobiledu2502908023 | 来源:互联网 | 2023-05-17 07:26
所有没有被使能的fault,都将进入HardFault一、出错时的CPU寄存器值二、定位在进入异常服务程序后,LR的值被自动更新为特殊的EXC_RETURN,这是
所有没有被使能的fault,都将进入Hard Fault
![](https://img1.php1.cn/3cd4a/24ed6/339/241d704a93953830.jpeg)
一、 出错时的CPU寄存器值
![cpu](https://img1.php1.cn/3cd4a/24ed6/339/743a1039a8056ef3.jpeg)
二、定位
在进入异常服务程序后, LR的值被自动更新为特殊的 EXC_RETURN,这是一个高28位全为1的值
上图中LR = 0xFFFFFFF9
,所以使用的是MSP
![](https://img1.php1.cn/3cd4a/24ed6/339/35511835eb5d8de9.jpeg)
三、在内存在找到MSP对应的地址
- 错误异常发生时,上下文(Stack Frame)按照下图顺序被入栈保存. R0最后入栈
![](https://img1.php1.cn/3cd4a/24ed6/339/645fa4b64bea5b95.jpeg)
四、使用Memory窗口查看MSP处的数据
![](https://img1.php1.cn/3cd4a/24ed6/339/edf7d67453049ef2.jpeg)
五、LR对应的汇编语句,正常执行时,函数返回后的执行地址
![lr](https://img1.php1.cn/3cd4a/24ed6/339/d1a674b82b7a61d8.jpeg)
六、PC对应的汇编语句
![pc](https://img1.php1.cn/3cd4a/24ed6/339/7cc59d1cb0e335e4.jpeg)
实际是运行0x08017070时进入Hard Fault的