标题: 又一次Hardfault [打印本页]

作者: xuwei    时间: 2015-6-13 00:34
标题: 又一次Hardfault
多少年没出现过hardfault 了。终于又让我碰上了。
最近在调试的时候需要一个外部中断,于是乎添加之,本想到没啥事的。结果直接Hardfault
心说来就来吧,反正又不是第一次,开始定位PC指针打开一看是ETX线程的MEMcpy出错。


找吧

坑爹的找了一晚上没找到,这是标准库啊,怎么会有问题、
之后就是各种的加保护,各种保护。

锁内核,关中断。

最后还是依旧如此


过去看了变量
发现有个dst 指针为0x00000000;而他应该是DMA的RAM地址
这不是非法修改么?我操。

找啊找找啊找
没找到
后来把M3的内核参考翻出来了,看寄存器,反而更糊涂了

实在没招了......

开始排除法
反复测试发现中断发送邮箱后就死。
打开线程入口

开始逐步的排除全删了一点点加,终于在

找到问题。
这是个信号,没什么奇怪的,但是

此信号为全局变量,这样我在引用的时候需要用extern 声明
结果

变成了这样



这是什么鸟货?
啧啧少了一个char /////

加上编译,运行OK

实际上这个内存越界、野指针、除零一样,是非法操作,会导致Hardfault的。因为不再是一个变量。所以然。

2晚上终于让我找到根了!马丹的哥从来不熬夜。为此耗费两个晚上,今天还他妈的想了一天。

搞定了也值得!!

2015 05 25
比特老王








作者: admin    时间: 2015-9-13 20:36
谢谢 hardfault这个问题我也遇到过.回顾一下




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1