HardFault_Handler调试及问题方法
我在keil编译代码,程序执行一断时间卡住了,我使用debug进行调试,之后全速运行,可以看到如下图所示程序进入HardFault异常,进入了while循环中。
注意,HardFault_Handler的存在意义是为了帮你解决程序的问题!
一、查找LR寄存器的值
1.我们进入Debug,运行到HardFault_Handler中
2.然后找到Registers界面
3.找到LR寄存器的值(然后参考下文)
二、根据LR寄存器的值,确定是要查找MSP还是PSP寄存器的值
根据LR的寄存器的值判断是主栈还是线程栈导致的问题,如果是主栈就继续查看MSP寄存器,如器果是进程栈,那么就查看PSP寄存。(我的LR寄存器的值是0xFFFFFFFD,在进程栈中,所以要查看PSP的值)
三、将MSP/PSP寄存器的值放入Memory中具体查找到两个08
在Memory1中搜(PSP的值,上面已经根据情况选择PSP或者MSP了,我这里是PSP)0x200012B8,回车键查看
注意两红色方框,有两个连续08开头的,这是两个地址,第一个地址是卡住的具体函数08001e4d,第二个是卡住的具体位置08002370(注意从后面开始)
四、根据地址查找到代码异常的具体位置
在show code at address中输入0x08002370(前面要输入0x),点击go to就跳转找到出现异常的代码段了。