HardFault如何处理

[复制链接]
 楼主| 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 | 显示全部楼层
为何无法上传图片?
X-Hawk 发表于 2010-12-22 12:30 | 显示全部楼层
进入HardFault, 如果是初次访问错的原因进入的,还有可能从推栈反推。

楼主描述的情况,大概早几条指令就已经错了,
然后一错再错(早不在正常的程序里了),最终跑不下去,出现HardFault.
这个大概只能靠程序员的敏感性。
 楼主| xiepengchenghn 发表于 2010-12-23 09:15 | 显示全部楼层
5# X-Hawk

已经查到是数组越界的问题了,但是遇到这种问题有什么通用的好的解决办法呢?
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)
香水城 发表于 2010-12-23 13:30 | 显示全部楼层
5# X-Hawk  

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


好的办法就是写程序时要格外小心;如果又可能,就在访问数组之前,先对下标做边界检查,检查通过后再访问数组。
 楼主| xiepengchenghn 发表于 2010-12-24 11:16 | 显示全部楼层
8# 香水城
谢谢
aaa2742 发表于 2011-4-10 13:45 | 显示全部楼层
数组越界还是好解决的,还有别的情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

267

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部