STM32发生HardFault_Handler错误的查找方法
来源:互联网 发布:mac覆盖安装系统 编辑:程序博客网 时间:2024/05/10 23:58
以前查找这种错误时比较盲目,就是在程序中缕着流程一步步的查找,逐个屏蔽进行排除,在程序隔一段加个while(1),以及通过串口发出错误状态日志等……这些方法都效率低下,不易查找。相比之下,查看堆栈的方法更加实用,效率也高。
在HardFault_Handler中的while(1)设置断点,然后运行,给它触发HardFault_Handler的条件,然后到断点处之后,查看watch窗口中的Call Stack+Local,也就是堆栈以及局部变量,程序执行到哪一句发生的错误,以及当时各个压栈的函数的各个局部变量的值一目了然,这里记录了死者临死前的五分钟到底对自己做了什么傻事……
如下图,就是对一个地址为NULL的空指针 p 进行解引用操作造成的HardFault_Handler错误
Call Stack+Local窗口内显示了发生错误之前的程序状态,当然,这只是导致程序错误的直接原因,有时候想要找到根源还是要继续花好大的一番功夫的,累积性的,概率性的死机(比如昨天……找BUG的这一惨痛经历,这里就不多说了,说多了全是眼泪……),但是至少是提供了一个瓜藤,你需要做的就是顺藤摸瓜了~把这个BUG消灭掉!
同样的方法还可以扩展到其他编程环境中。各位看客举一反三即可。(截图中是Keil)总之就是一句话:查看错误发生时的堆栈情况。
同样,在visual studio中:
同样,在这里用对空指针进行解引用操作这种错误作为例子,同样通过查看调用堆栈方式以及局部变量来确定错误的位置(当然,没人会像我截图中那样使用,这里只是想凸显一下压栈以及确定错误位置的过程),接下来的工作同样是顺藤摸瓜。
当然,这只是发生HardFault_Handler错误的一种情况而已,像其他还有堆栈溢出,除数为0之类的也会发生该错误。欢迎补充。
还是那句话,不存在不存在BUG的程序,别说Hello World!
- STM32发生HardFault_Handler错误的查找方法
- STM32硬件错误HardFault_Handler的处理方法
- STM32 HardFault_Handler错误定位方法
- STM32出现HardFault_Handler问题查找方法
- stm32 HardFault_Handler调试及问题查找方法
- stm32 HardFault_Handler调试及问题查找方法
- stm32 HardFault_Handler调试及问题查找方法
- stm32 HardFault_Handler调试及问题查找方法
- stm32 HardFault_Handler调试及问题查找方法
- 关于STM32处理器的HardFault_Handler错误原因
- STM32进入HardFault_Handler的调试方法
- HardFault_Handler问题查找方法
- HardFault_Handler问题查找方法
- HardFault_Handler问题查找方法
- HardFault_Handler问题查找方法
- HardFault_Handler问题查找方法
- HardFault_Handler问题查找方法
- HardFault_Handler问题查找方法
- AMD+AMD双显卡机器安装ubuntu解决方案(解决thinkpad e535高温自动关机)
- iOS 中获得本机号,拨打电话,发送短信
- Java按行读取文本文件和写文件
- 自实现 IOC, 参考 马士兵
- 题目1194:八进制
- STM32发生HardFault_Handler错误的查找方法
- 基于51单片机的简易计算器
- 求约数个数问题
- OC 中的3种BLOCK
- javaScript学习之路: javaScript数据类型
- Thinking Different
- (poj3181)完全背包((和钱币一样只是这个用到大数))
- POJ 1125 Stockbroker Grapevine(Floyd)
- WIN7 装2010 没反应,不要虚拟光驱,解压出来就可以安装了