程序“跑飞”了,看门狗让单片机复位,程序是从头重新运行吗?
我想用“看门狗”防止程序“ 跑飞”,但是不想让程序再从头重新运行,能让程序从“跑飞”时的地方继续运行吗?怎么写这样的语句,请大侠指点。 呵呵,没听过,有谁会的我一头攒墙 至少就AVR内部狗来说,很简单因为新的带 debug-wire 的AVR芯片都有一个叫做WDT的中断向量,只要看门狗设置正确,那么第一次狗叫的时候就会进入中断,此时即可喂狗,并且中断服务程序完毕后也会正常的返回原位继续运行
so,楼上“一头[攒]墙”去吧——虽然我不太知道墙怎么个“攒”法……只听说过攒钱咯…… 不过,很想就标题问个问题:
既然已经“跑飞”了,何必中断完了还要继续飞下去? 太不给面子了,咯咯,等我查清楚了就攒 狗叫后还让程序回原位运行,从程序运行的可靠性上要注意2个问题:
1,在狗叫前运行的代码能否确定是什么,通常“狗”发现异常到开始“叫”要花上一段时间(通常几十MS到几百MS),这段时间运行的代码是正常或异常的,是不能确定的。
2,这第2个问题,其实是第1问题的衍生,如果代码是运行异常的,那么程序的中数据处理是否可靠?
所以偶认为:即使有这个功能,偶也不会直接用~~~ 樓主是不是自相矛盾了?? 楼主的讨论会不会是这个意思:误复位怎样才能不重头开始执行?
我现在的系统遇到的干扰比较大,老是复位,从头开始执行,有没有办法使他从复位点开始跑? 是刻保存状态可以吗? 回复【5楼】78tide
狗叫后还让程序回原位运行,从程序运行的可靠性上要注意2个问题:
1,在狗叫前运行的代码能否确定是什么,通常“狗”发现异常到开始“叫”要花上一段时间(通常几十ms到几百ms),这段时间运行的代码是正常或异常的,是不能确定的。
2,这第2个问题,其实是第1问题的衍生,如果代码是运行异常的,那么程序的中数据处理是否可靠?
所以偶认为:即使有这个功能,偶也不会直接用~~~
-----------------------------------------------------------------------
此乃问题所在,在复位是不能确认程序是否处在正常运行。 程序写的好,不用狗看家
如果跑飞了,即使从飞的地方再运行,程序也已经不可靠了 飞思卡尔的单片机可以实现这功能,异常复位后ram里的内容保持不变 但是数据不一定是对的,程序最好是在不加狗的情况能稳定正常运行 441354741 发表于 2010-8-11 15:17 static/image/common/back.gif
飞思卡尔的单片机可以实现这功能,异常复位后ram里的内容保持不变
这个RAM里面的数据能保证全部正确吗?除非有其他相关验证程序支持。 看门狗会让程序复位,在复位之后判断一下是否看门狗动作的,这里可以区分对待。
真不知道想把狗当什么用。。。程序跑飞了狗才会叫,狗叫了就说明到了不得不复位重头来的地步了。。。那什么当前的执行位置,什么内存中的数据,还可信么?还有价值么?。。。 LS说的对,狗叫了证明飞出去的那段已经十分不可靠了,为什么还要从飞的地方跑,唯一做的就是复位,复位还可能避免再次飞走。 就是,跑飞了就复位赛 如果是看门狗引起的复位,可以通过查询寄存器状态判断是不是因为看门狗复位引起的,然后可以调用相关的处理程序之后继续执行,至于要知道是从哪里跑飞的就没有意义了,如果非要知道也不是不可以,只能每执行一段代码就留下一个标志位,那样程序执行的效率有点太低了吧。 我也觉得意义不大,跑飞了复位就好了嘛。只要程序块没有堵塞CPU的地方,扫描完整个系统根本就花不了多少时间的。
页:
[1]