wling 发表于 2006-6-22 20:20:48

程序“跑飞”了,看门狗让单片机复位,程序是从头重新运行吗?

我想用“看门狗”防止程序“ 跑飞”,但是不想让程序再从头重新运行,能让程序从“跑飞”时的地方继续运行吗?怎么写这样的语句,请大侠指点。

dissipator 发表于 2006-6-22 22:57:27

呵呵,没听过,有谁会的我一头攒墙

watercat 发表于 2006-6-22 23:02:02

至少就AVR内部狗来说,很简单



因为新的带 debug-wire 的AVR芯片都有一个叫做WDT的中断向量,只要看门狗设置正确,那么第一次狗叫的时候就会进入中断,此时即可喂狗,并且中断服务程序完毕后也会正常的返回原位继续运行



so,楼上“一头[攒]墙”去吧——虽然我不太知道墙怎么个“攒”法……只听说过攒钱咯……

watercat 发表于 2006-6-22 23:21:48

不过,很想就标题问个问题:



既然已经“跑飞”了,何必中断完了还要继续飞下去?

dissipator 发表于 2006-6-22 23:25:48

太不给面子了,咯咯,等我查清楚了就攒

78tide 发表于 2006-6-23 09:41:21

狗叫后还让程序回原位运行,从程序运行的可靠性上要注意2个问题:

1,在狗叫前运行的代码能否确定是什么,通常“狗”发现异常到开始“叫”要花上一段时间(通常几十MS到几百MS),这段时间运行的代码是正常或异常的,是不能确定的。

2,这第2个问题,其实是第1问题的衍生,如果代码是运行异常的,那么程序的中数据处理是否可靠?

所以偶认为:即使有这个功能,偶也不会直接用~~~

avrboy 发表于 2006-6-23 10:38:51

樓主是不是自相矛盾了??

onyourmark66 发表于 2009-8-13 13:16:21

楼主的讨论会不会是这个意思:误复位怎样才能不重头开始执行?
    我现在的系统遇到的干扰比较大,老是复位,从头开始执行,有没有办法使他从复位点开始跑?

zhonghuaxiaozi 发表于 2010-8-11 11:39:08

是刻保存状态可以吗?

mcu2007 发表于 2010-8-11 11:42:55

回复【5楼】78tide
狗叫后还让程序回原位运行,从程序运行的可靠性上要注意2个问题:
1,在狗叫前运行的代码能否确定是什么,通常“狗”发现异常到开始“叫”要花上一段时间(通常几十ms到几百ms),这段时间运行的代码是正常或异常的,是不能确定的。
2,这第2个问题,其实是第1问题的衍生,如果代码是运行异常的,那么程序的中数据处理是否可靠?
所以偶认为:即使有这个功能,偶也不会直接用~~~
-----------------------------------------------------------------------

此乃问题所在,在复位是不能确认程序是否处在正常运行。

bigZ 发表于 2010-8-11 11:55:07

程序写的好,不用狗看家
如果跑飞了,即使从飞的地方再运行,程序也已经不可靠了

441354741 发表于 2010-8-11 15:17:23

飞思卡尔的单片机可以实现这功能,异常复位后ram里的内容保持不变

test_machine 发表于 2012-9-26 16:50:09

但是数据不一定是对的,程序最好是在不加狗的情况能稳定正常运行

rqiang 发表于 2012-9-26 16:53:59

441354741 发表于 2010-8-11 15:17 static/image/common/back.gif
飞思卡尔的单片机可以实现这功能,异常复位后ram里的内容保持不变

这个RAM里面的数据能保证全部正确吗?除非有其他相关验证程序支持。

117433525 发表于 2012-9-26 16:59:50

看门狗会让程序复位,在复位之后判断一下是否看门狗动作的,这里可以区分对待。

yurinacn 发表于 2012-9-26 17:58:06

真不知道想把狗当什么用。。。程序跑飞了狗才会叫,狗叫了就说明到了不得不复位重头来的地步了。。。那什么当前的执行位置,什么内存中的数据,还可信么?还有价值么?。。。

cumtgao 发表于 2012-9-28 10:02:09

LS说的对,狗叫了证明飞出去的那段已经十分不可靠了,为什么还要从飞的地方跑,唯一做的就是复位,复位还可能避免再次飞走。

dhdj866 发表于 2012-9-29 21:36:47

就是,跑飞了就复位赛

5IDIANZI 发表于 2012-9-30 12:36:13

如果是看门狗引起的复位,可以通过查询寄存器状态判断是不是因为看门狗复位引起的,然后可以调用相关的处理程序之后继续执行,至于要知道是从哪里跑飞的就没有意义了,如果非要知道也不是不可以,只能每执行一段代码就留下一个标志位,那样程序执行的效率有点太低了吧。

304301959 发表于 2012-10-1 10:32:44

我也觉得意义不大,跑飞了复位就好了嘛。只要程序块没有堵塞CPU的地方,扫描完整个系统根本就花不了多少时间的。
页: [1]
查看完整版本: 程序“跑飞”了,看门狗让单片机复位,程序是从头重新运行吗?