亲自解决STM32 HardFault_Handler错误记录

来源:互联网 发布:全国地图软件下载 编辑:程序博客网 时间:2024/05/24 02:38
HardFault_Handler错误的原因最最多的原因是数组越界以及指针指飞,其实这两个是差不多的,都是访问了不该访问的地方导致了错误,就像一个路痴,漫无目的的走到了一个陌生的地方……然后就迷路了……然后就木有然后了……(貌似是第一次写原创,我该如何装成经常写的样子……)
以前查找这种错误时比较盲目,就是在程序中缕着流程一步步的查找,逐个屏蔽进行排除,在程序隔一段加个while(1),以及通过串口发出错误状态日志等……这些方法都效率低下,不易查找。相比之下,查看堆栈的方法更加实用,效率也高。
在HardFault_Handler中的while(1)设置断点,然后运行,给它触发HardFault_Handler的条件,然后到断点处之后,查看watch窗口中的Call Stack+Local,也就是堆栈以及局部变量,程序执行到哪一句发生的错误,以及当时各个压栈的函数的各个局部变量的值一目了然,这里记录了死者临死前的底对自己做了什么傻事。
下面是刚成功解决死机问题的过程:

Call Stack+Local窗口内显示了发生错误之前的程序状态。

开始运行结果:



先定位到时USART3_IRQHandler函数data问题,然后发现里面是指针,不好定位,于是把指针赋值换成数组,原因立刻浮现了。


然后串口DEBUG结果:


找到原因了,完美解决死机问题。

0 0