打印

IAR调试进入HardFault_Handler问题解决

[复制链接]
5915|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 hanfei08131106 于 2018-6-29 13:36 编辑

第一次遇到这种题,不知道从何处下手,周末回家的时候想起来,去度娘搜索一下,果然很多人遇到了同样的问题。
看了几个帖子之后,对应着IAR熟悉了一下锁定流程,最后问题排除。
具体步骤如下:
1.在HardFault_Handler函数内打断点,如下图所示:

2.程序仿真运行,让问题再现。等到进入断点之后,打开view->call stack。如下图所示:

根据上图判断,是内存释放出现了问题,出现了0地址和非法地址,根据函数锁定位置,发现
是由于指针在未初始化的情况下为非空,而此时指针所在的消息队列未收到任何消息,从而
释放了该指针导致。
3.同样的调试手段使用在了操作系统死掉的情况下调试,同样暂停仿真,去查看call stack中程
序的上下文,迅速锁定问题点。


仅以此文分享一下调试技巧问题,如果感觉小儿科,请勿拍砖。谢谢!

相关帖子

沙发
翻云| | 2018-6-30 13:36 | 只看该作者
这个不懂啊

使用特权

评论回复
板凳
caoenq| | 2018-6-30 18:41 | 只看该作者
栈溢出了,把栈的空间改大一点

使用特权

评论回复
地板
hanfei08131106|  楼主 | 2018-7-2 09:27 | 只看该作者
本帖最后由 hanfei08131106 于 2018-7-2 09:30 编辑
caoenq 发表于 2018-6-30 18:41
栈溢出了,把栈的空间改大一点

主要是消息队列中包含指针,未初始化的情况下等待消息队列,一旦没有消息队列,指针初始值不是NULL或者其他合法地址,从而释放该指针导致。如下图:

使用之前初始化一下,即可。

使用特权

评论回复
5
hanfei08131106|  楼主 | 2018-7-2 09:31 | 只看该作者

我也是网上看到的资料,现学现用。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:适应环境,不要让环境去适应你、、

5

主题

144

帖子

1

粉丝