打印

请问cortex M3 debug时进入 Hard Fault Handler,怎么分析出错原因

[复制链接]
7667|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
nigl|  楼主 | 2011-9-13 15:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
TI_MCU| | 2011-9-15 16:31 | 只看该作者
本帖最后由 TI_MCU 于 2011-9-15 17:21 编辑

这个在另外一个帖子有讨论
主要是外设初始化,没有正常初始化就开始使用。
另外是memory 冲突,操作到不存在的地址,或者溢出 。或者操作到受保护的地方。
还有就是中断冲突,没有清中断或者优先级没有设置好。

使用特权

评论回复
板凳
ninitata| | 2011-9-16 14:42 | 只看该作者
一步一步跟踪

使用特权

评论回复
地板
永远的不知| | 2011-9-17 15:55 | 只看该作者
1# nigl

一般有两种情况,操作未初始化的外设和访问不存在的地址(包括内存堆栈溢出等)。

使用特权

评论回复
5
xifengsong| | 2011-9-20 19:23 | 只看该作者
我觉得是你的中断向量表不对,这样当你进入别的中断时地址不对,系统就认为是硬件错误,进入硬件中断。你要看看中断向量表里的相应你用到的中断有没有注册。

使用特权

评论回复
6
闇靜--| | 2011-10-15 17:33 | 只看该作者
楼主用的是什么编译器啊 ?IAR很容易出错的啊  关掉重新打开一次试试

使用特权

评论回复
7
lcq07| | 2011-10-15 22:29 | 只看该作者
调试进入fault时,去看sp指针,然后从栈中找出进入fault时的pc值,pc的值就是你出错处的代码地址,一般来说,出现这种情况就像大家说的是你在操作某个外设时没有对相应的外设上电引起的

使用特权

评论回复
8
just_soso| | 2011-10-18 09:49 | 只看该作者
楼上正解,从初始化一步一步查,那些没有初始化就开始用了最容易造成这种问题。或者简单一点,一部分一部分屏蔽一些功能,看那里出了问题

使用特权

评论回复
9
tobycheng| | 2011-10-28 12:22 | 只看该作者
一般是在 Startup.s 文件里面的中断声明有问题。

使用特权

评论回复
10
hzhena| | 2013-4-25 12:15 | 只看该作者
lcq07 发表于 2011-10-15 22:29
调试进入fault时,去看sp指针,然后从栈中找出进入fault时的pc值,pc的值就是你出错处的代码地址,一般来说 ...

嗯 我看到了有个(PC)的值为
0x08001104,可是不懂它代表什么呢?您能解释一下吗

使用特权

评论回复
11
三千花花世界| | 2013-4-25 12:43 | 只看该作者
hzhena 发表于 2013-4-25 12:15
嗯 我看到了有个(PC)的值为
0x08001104,可是不懂它代表什么呢?您能解释一下吗 ...

说明代码执行到0x08001104之后发生了错误导致了HardFault,0x08001104是堆栈记下的最后一个代码返回地址

你可以在0x08001104的地方加一个断点,运行到该地址以后执行单步操作,应该很快能跟踪到出错代码处。

使用特权

评论回复
12
hzhena| | 2013-4-25 14:07 | 只看该作者
三千花花世界 发表于 2013-4-25 12:43
说明代码执行到0x08001104之后发生了错误导致了HardFault,0x08001104是堆栈记下的最后一个代码返回地址
...

嘿嘿,请问0x08001104是在哪个地方呢?

使用特权

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

本版积分规则

0

主题

11

帖子

1

粉丝