搜索
bottom↓
回复: 19

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

[复制链接]

出0入0汤圆

发表于 2006-6-22 20:20:48 | 显示全部楼层 |阅读模式
我想用“看门狗”防止程序“ 跑飞”,但是不想让程序再从头重新运行,能让程序从“跑飞”时的地方继续运行吗?怎么写这样的语句,请大侠指点。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2006-6-22 22:57:27 | 显示全部楼层
呵呵,没听过,有谁会的我一头攒墙

出0入0汤圆

发表于 2006-6-22 23:02:02 | 显示全部楼层
至少就AVR内部狗来说,很简单



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



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

出0入0汤圆

发表于 2006-6-22 23:21:48 | 显示全部楼层
不过,很想就标题问个问题:



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

出0入0汤圆

发表于 2006-6-22 23:25:48 | 显示全部楼层
太不给面子了,咯咯,等我查清楚了就攒

出0入0汤圆

发表于 2006-6-23 09:41:21 | 显示全部楼层
狗叫后还让程序回原位运行,从程序运行的可靠性上要注意2个问题:

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

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

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

出0入0汤圆

发表于 2006-6-23 10:38:51 | 显示全部楼层
樓主是不是自相矛盾了??

出0入0汤圆

发表于 2009-8-13 13:16:21 | 显示全部楼层
楼主的讨论会不会是这个意思:误复位怎样才能不重头开始执行?
    我现在的系统遇到的干扰比较大,老是复位,从头开始执行,有没有办法使他从复位点开始跑?

出0入0汤圆

发表于 2010-8-11 11:39:08 | 显示全部楼层
是刻保存状态可以吗?

出0入0汤圆

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

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

出0入0汤圆

发表于 2010-8-11 11:55:07 | 显示全部楼层
程序写的好,不用狗看家
如果跑飞了,即使从飞的地方再运行,程序也已经不可靠了

出0入0汤圆

发表于 2010-8-11 15:17:23 | 显示全部楼层
飞思卡尔的单片机可以实现这功能,异常复位后ram里的内容保持不变

出0入0汤圆

发表于 2012-9-26 16:50:09 | 显示全部楼层
但是数据不一定是对的,程序最好是在不加狗的情况能稳定正常运行

出0入0汤圆

发表于 2012-9-26 16:53:59 | 显示全部楼层
441354741 发表于 2010-8-11 15:17
飞思卡尔的单片机可以实现这功能,异常复位后ram里的内容保持不变

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

出0入21汤圆

发表于 2012-9-26 16:59:50 | 显示全部楼层
看门狗会让程序复位,在复位之后判断一下是否看门狗动作的,这里可以区分对待。

出0入0汤圆

发表于 2012-9-26 17:58:06 | 显示全部楼层
真不知道想把狗当什么用。。。程序跑飞了狗才会叫,狗叫了就说明到了不得不复位重头来的地步了。。。那什么当前的执行位置,什么内存中的数据,还可信么?还有价值么?。。。

出0入0汤圆

发表于 2012-9-28 10:02:09 | 显示全部楼层
LS说的对,狗叫了  证明飞出去的那段已经十分不可靠了,为什么还要从飞的地方跑,唯一做的就是复位,复位还可能避免再次飞走。

出0入0汤圆

发表于 2012-9-29 21:36:47 | 显示全部楼层
就是,跑飞了就复位赛

出0入0汤圆

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

出0入0汤圆

发表于 2012-10-1 10:32:44 | 显示全部楼层
我也觉得意义不大,跑飞了复位就好了嘛。只要程序块没有堵塞CPU的地方,扫描完整个系统根本就花不了多少时间的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-10 21:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表