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

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

然后串口DEBUG结果:

找到原因了,数组访问越界
史海拾趣
|
我有一PDA,Symbol PPT 8846 (8800系列的) Windows CE 4.2 (经网友纠正应为Pocket PC 2003,后来才看到机器面板有Pocket PC字样) 目前自带的Remote Servers Client 不能全屏,也不能将声音带到PDA上面来 我有尝试安装一些版本的RemoteDeskt ...… 查看全部问答> |
|
d:\\question.jpg 以上是一个发射地址码和数据码的电路。在数据码编辑的时,原先的电路是使用开关控制数据位D0-D3的高低电平,进而对数据位D0-D3进行编辑。 我的问题是,这部分开关控制的电路(图上红色长方形框所示),是否能通过一块芯片控制 ...… 查看全部问答> |
|
吉时利一直在致力于推进SMU技术 *了解吉时利或测试测量应用方案更多信息,可登录 吉时利中国网站http://www.keithley.com.cn/ 吉时利微博 http://weibo.com/keithley … 查看全部问答> |
|
LED应用 - 并行 LED 的电流匹配 & 新电流模式 PWM 控制器 本帖最后由 dontium 于 2015-1-23 13:08 编辑 LED应用—— 新电流模式 PWM 控制器支持升压、反向、SEPIC 和 LED 驱动器应用 镇流器电阻计算 – 并行 LED 的电流匹配 更多实用TI资料,周周更新,欢 ...… 查看全部问答> |
|
这个是我的DS1302 谁帮我试下,SCLK=P1^0,IO=P1^1,REST=P2^4;数码管段是P3口,位是P2^0-P2^3,可是我显示出来的是1100,不知道怎么回事,帮我改下 谢谢 #include<reg51.h>#include <intrins.h>#define uchar unsigned char #def ...… 查看全部问答> |




