lg97033103 发表于 2011-1-26 10:49:03

请教产生Hardfault的原因分析

我们用NXP的LPC17XX做了个产品,在量产中出现部分机器在老化实验中死机的现象,表现为设备在显示某个画面后就停止不动了,各个画面都可能出现.
奇怪的是,把机器重新烧录一遍程序后(程序跟之前会死机的完全一样),绝大部分机器在很长时间的老化运行中都不死了,能正常在程序执行.

后来将部分极容易死机的机器挑出来,通过跟踪发现死机时,程序进入到了hardfault的异常服务程序.
我搜了下,有人说产生hardfault的原因多数是因为堆栈益出或对内存的操作越界造成的,但是在我们的老化程序中,是在周而复始的执行一段循环代码,如果是因为堆栈或对内存的操作越界造成的,那为什么有那么多机器在老化时正常?那些出现过死机的机器重新刷一遍程序后又可以正常运行很多次的老化循环程序不死?(但是过多久会死,也是未知的)

所以想请教论坛里的高人帮助分析下:产生hardfault的条件,除了上面说的堆栈或对内存操越界之外,还有什么其他条件?
另外,如果发生了hardfault,但是程序将中断禁止,那么程序可能会出现什么状况?

adsladsl 发表于 2011-1-26 10:55:12

也关注这问题。

zzjjhh250 发表于 2011-1-26 11:01:14

对内存的操作越界

heky 发表于 2011-1-26 11:06:51

出这种问题,好好查查代码。
指针指向不存在的地址,都有可能导致出错。

lg97033103 发表于 2011-1-26 14:00:49

回复【3楼】heky
-----------------------------------------------------------------------

代码几万行,好好查代码恐怕不是个很好的建议!其实也仔细查过了,如果很容易查出来,也不至于在此发贴求助了~

zxf0124 发表于 2012-7-19 14:56:01

这几天,我也遇到仪器死机的问题。
求解答啊。求解答。

tiger_999 发表于 2012-9-26 10:05:24

产生hardfault的原因可能的原因是对一个变量的同时读写造成的。比如一个全局变量在主函数时在被读写,然而此时又有中断在对此变量进行读写,就会出现hardfault,这个问题我遇到过,折腾了大半天,血的教训,希望共勉。
页: [1]
查看完整版本: 请教产生Hardfault的原因分析