打印

HardFault如何处理

[复制链接]
2916|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiepengchenghn|  楼主 | 2010-12-22 11:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
应用STM32的时候,有时候会遇到HardFault,这个时候总是有点手无足措,不知道该如何快速定位问题所在,看过<Cortex-M3权威指南>里面关于异常的一些说明,但是还是不会处理,故请教香主。在坛内看到有人说“在进入HardFault_Handler之后,根据堆栈指针查看堆栈,找到堆栈中最新的函数返回地址,到这个地址上去加断点,一步步根据汇编执行代码”。我尝试了下,但是发现堆栈中存放的是一个系统保留的地址04EDE0。请教下香主,这类问题如何处理,谢谢。
沙发
xiepengchenghn|  楼主 | 2010-12-22 11:20 | 只看该作者

使用特权

评论回复
板凳
xiepengchenghn|  楼主 | 2010-12-22 11:22 | 只看该作者
file:///C:/Documents

使用特权

评论回复
地板
xiepengchenghn|  楼主 | 2010-12-22 11:22 | 只看该作者
为何无法上传图片?

使用特权

评论回复
5
X-Hawk| | 2010-12-22 12:30 | 只看该作者
进入HardFault, 如果是初次访问错的原因进入的,还有可能从推栈反推。

楼主描述的情况,大概早几条指令就已经错了,
然后一错再错(早不在正常的程序里了),最终跑不下去,出现HardFault.
这个大概只能靠程序员的敏感性。

使用特权

评论回复
6
xiepengchenghn|  楼主 | 2010-12-23 09:15 | 只看该作者
5# X-Hawk

已经查到是数组越界的问题了,但是遇到这种问题有什么通用的好的解决办法呢?

使用特权

评论回复
7
X-Hawk| | 2010-12-23 10:02 | 只看该作者
5# X-Hawk  

已经查到是数组越界的问题了,但是遇到这种问题有什么通用的好的解决办法呢?
xiepengchenghn 发表于 2010-12-23 09:15


也没想到啥好办法
我一般到处用PRINT_LINE打行号,多打一些总能抓到。

#define PRINT_LINE   do{printf("%s,%d\n", __FILE__, __LINE__);} while(0)

使用特权

评论回复
8
香水城| | 2010-12-23 13:30 | 只看该作者
5# X-Hawk  

已经查到是数组越界的问题了,但是遇到这种问题有什么通用的好的解决办法呢?
xiepengchenghn 发表于 2010-12-23 09:15


好的办法就是写程序时要格外小心;如果又可能,就在访问数组之前,先对下标做边界检查,检查通过后再访问数组。

使用特权

评论回复
9
xiepengchenghn|  楼主 | 2010-12-24 11:16 | 只看该作者
8# 香水城
谢谢

使用特权

评论回复
10
aaa2742| | 2011-4-10 13:45 | 只看该作者
数组越界还是好解决的,还有别的情况。

使用特权

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

本版积分规则

0

主题

267

帖子

1

粉丝