打印

看门狗复位的问题

[复制链接]
5441|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
h286288986|  楼主 | 2010-6-24 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
h286288986|  楼主 | 2010-6-24 09:53 | 只看该作者
备注:外部情况已经考虑进去了。主要是单片机自身跑飞的情况!

使用特权

评论回复
板凳
ayb_ice| | 2010-6-24 09:56 | 只看该作者
"进入意想不到的死循环"
这后果很严重
判断看门狗复位后,首先保存数据
...

使用特权

评论回复
地板
zq1987731| | 2010-6-24 10:26 | 只看该作者
如果你的系统仅仅是进入了“意想不到的死循环”,而非“完全死机”状态
那么就将看门狗复位信号输出作为一个最高优先级外部中断(软件看门狗的话更方便,一般都会提供一个中断源),然后在该中断服务程序中保存数据至EEPROM,保存完毕后该中断不返回,直接调用复位命令

使用特权

评论回复
5
流行音乐| | 2010-6-24 10:50 | 只看该作者
一旦有需要,就及时保存数据,只能这样。

使用特权

评论回复
6
airwill| | 2010-6-24 10:53 | 只看该作者
to:楼上, 此法虽好, 很多看门狗复位没有中断, 并不完全适应各个系统.

我常用的办法是, 对关键参数采用冗余和校验技术, 每次修改关键的参数时, 都进行冗余计算.
这样即使看门狗复位后,  还可以追踪到复位前的RAM 里的参数

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
冷漠 + 1
7
冷漠| | 2010-6-24 10:59 | 只看该作者
小心驶得万年船。
其实,小心的程序员是在程序运行的任何时候,都要考虑到,如果万一“异常”发生怎么办?《匠人手记》中有详细的防备秘籍方法:程序运行的正常轨道上都分阶段记录标记,一旦发生“异常”,这一段轨道作废,程序退回到上一次正常“标记”处,重新运行。——当然在上一标记处,你已经备份了重要数据到E2ROM。

这就好像在容易迷路的大山里行进,唯一的方法是做好曾经的路标。如果迷路,退回上一路标改变方向重来。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
8
highgear| | 2010-6-24 21:10 | 只看该作者
7搂根本没有用过或做过看门狗复位, 不懂就不要装懂。

4搂, 6搂是经验之谈, 特别是6搂的方法,不仅要冗余, 而且还要加入校验, 如checksum.

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
9
NE5532| | 2010-6-24 21:40 | 只看该作者
没有看到你的具体应用环境,仅供参考

1.单片机可以分辨狗复位和一般性复位
2.对要写入的数据采用全局数定地址保存
3.设置一个定地址保存的标志,在数据准备好后,写入前置位,完全写入E2并校验后清除
4.复位后校验复位源,如果是狗复位,则判断3中的标志,若标志置位,则立即将该段数据写入E2,否则正常启动。

pS:复位本身不清除RAM数据,但是很多C编译器的启动代码要清,要采取上面方法时,请使用汇编改写启动代码。

另:还魂丹顶不过金钟罩,想办法让程序不死,才是王道。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
冷漠 + 1
10
h286288986|  楼主 | 2010-6-25 09:49 | 只看该作者
感谢各位的指点。

使用特权

评论回复
11
流行音乐| | 2010-6-25 11:13 | 只看该作者
有些人跑题了,楼主问的是程序异常时如何保存重要数据,而不是如何保证数据的正确性。
既然程序已经异常,还能指望程序保存数据吗?所以我在5楼的看法是对的,即在程序未出现异常前,只要有数据就立即保存,这样能最大限度的减小损失。
至于数据的校验和冗余,这不是楼主提出的问题。即使程序不出现异常,也是可以考虑校验和冗余的。

使用特权

评论回复
12
冷漠| | 2010-6-25 16:16 | 只看该作者
本帖最后由 冷漠 于 2010-6-25 16:17 编辑

顶11楼。
既然程序已经异常,还能指望程序保存数据吗?


说的太对了,异常都发生了,如何肯定保存的数据是正确的?所以,“防患于未然”。而不是到处救火。

昨天看报纸,“中国首艘国产万吨巨轮沉没之谜。” 中国有能力自己制造万吨远洋货轮,轰动世界的事;没想到宣传没两天就沉了。开始造船厂的“精英们”怀疑事件像韩国“天安舰”那样,是被美国的鱼雷击沉的,最终调查结论:在小暗礁上刮蹭了一下,漏了,“异常”发生了。**了2个多小时,终于沉了。
那么它设计的时候,为什么没考虑到“万一刮蹭或者碰撞到暗礁怎么办”?漏了我再来补救?泰坦尼克号设计了三层,漏了一层还有一层。同样的航线,同样的吨位,非国产巨轮怎么不触礁?——别人自重轻,吃水浅呀。这是报纸上说的。

对我的影响,就是终于理解了为什么会有“造不如买,买不如租。”——那是多少异常事件、事故、无可挽回的损失堆出来的。

使用特权

评论回复
13
冷漠| | 2010-6-25 17:42 | 只看该作者
也顶6楼:
这样即使看门狗复位后,  还可以追踪到复位前的RAM 里的参数。


6楼的核心是“即使看门狗复位发生异常,还可以回溯追踪到复位之前正常状态时的RAM里的参数。”
     这和冷漠7楼所举《匠人手记》内容:……程序退回到上一次正常“标记”处,重新运行;基本思想一致。8楼所长顶6楼和顶冷漠一样,感谢抬举。

    所长大人今年53了吧,还在这和我们小辈菜鸟玩“复位电路”和“555时基”?冷漠今年25,早就不玩复位电路了。确实根本不懂也没玩过什么看门狗,自己做的系统从不需要什么狗。再说谁都会玩,大街上随便拉一个来就行了。所长还要自己亲自做看门狗?
    劝一句:
   “韦编三绝今知命;黄绢初裁好著书。”

使用特权

评论回复
14
highgear| | 2010-6-25 21:01 | 只看该作者
冷漠你少来东厂的那一套。给你说过多少遍了, 你不懂就不要装懂。你楼上胡扯来胡扯去, 不过是为了装13而已, 你不装你会死么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

505

帖子

3

粉丝