看门狗复位的问题

[复制链接]
6036|13
 楼主| h286288986 发表于 2010-6-24 09:40 | 显示全部楼层 |阅读模式
请教一个问题,先谢谢。
有这样一种情况:
  假如单片机程序进入意想不到的死循环(这种情况有可能由外部情况引起,软件看门狗已经启动),但是有非常重要的数据要保存到E2ROM中,请问我该如何处理!谢谢!
 楼主| h286288986 发表于 2010-6-24 09:53 | 显示全部楼层
备注:外部情况已经考虑进去了。主要是单片机自身跑飞的情况!
ayb_ice 发表于 2010-6-24 09:56 | 显示全部楼层
"进入意想不到的死循环"
这后果很严重
判断看门狗复位后,首先保存数据
...
zq1987731 发表于 2010-6-24 10:26 | 显示全部楼层
如果你的系统仅仅是进入了“意想不到的死循环”,而非“完全死机”状态
那么就将看门狗复位信号输出作为一个最高优先级外部中断(软件看门狗的话更方便,一般都会提供一个中断源),然后在该中断服务程序中保存数据至EEPROM,保存完毕后该中断不返回,直接调用复位命令
流行音乐 发表于 2010-6-24 10:50 | 显示全部楼层
一旦有需要,就及时保存数据,只能这样。
airwill 发表于 2010-6-24 10:53 | 显示全部楼层
to:楼上, 此法虽好, 很多看门狗复位没有中断, 并不完全适应各个系统.

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

评分

参与人数 1威望 +1 收起 理由
冷漠 + 1

查看全部评分

冷漠 发表于 2010-6-24 10:59 | 显示全部楼层
小心驶得万年船。
其实,小心的程序员是在程序运行的任何时候,都要考虑到,如果万一“异常”发生怎么办?《匠人手记》中有详细的防备秘籍方法:程序运行的正常轨道上都分阶段记录标记,一旦发生“异常”,这一段轨道作废,程序退回到上一次正常“标记”处,重新运行。——当然在上一标记处,你已经备份了重要数据到E2ROM。

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

评分

参与人数 1威望 +1 收起 理由
xlsbz + 1

查看全部评分

highgear 发表于 2010-6-24 21:10 | 显示全部楼层
7搂根本没有用过或做过看门狗复位, 不懂就不要装懂。

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

评分

参与人数 1威望 +1 收起 理由
xlsbz + 1

查看全部评分

NE5532 发表于 2010-6-24 21:40 | 显示全部楼层
没有看到你的具体应用环境,仅供参考

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

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

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

评分

参与人数 1威望 +1 收起 理由
冷漠 + 1

查看全部评分

 楼主| h286288986 发表于 2010-6-25 09:49 | 显示全部楼层
感谢各位的指点。
流行音乐 发表于 2010-6-25 11:13 | 显示全部楼层
有些人跑题了,楼主问的是程序异常时如何保存重要数据,而不是如何保证数据的正确性。
既然程序已经异常,还能指望程序保存数据吗?所以我在5楼的看法是对的,即在程序未出现异常前,只要有数据就立即保存,这样能最大限度的减小损失。
至于数据的校验和冗余,这不是楼主提出的问题。即使程序不出现异常,也是可以考虑校验和冗余的。
冷漠 发表于 2010-6-25 16:16 | 显示全部楼层
本帖最后由 冷漠 于 2010-6-25 16:17 编辑

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


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

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

对我的影响,就是终于理解了为什么会有“造不如买,买不如租。”——那是多少异常事件、事故、无可挽回的损失堆出来的。
冷漠 发表于 2010-6-25 17:42 | 显示全部楼层
也顶6楼:
这样即使看门狗复位后,  还可以追踪到复位前的RAM 里的参数。


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

    所长大人今年53了吧,还在这和我们小辈菜鸟玩“复位电路”和“555时基”?冷漠今年25,早就不玩复位电路了。确实根本不懂也没玩过什么看门狗,自己做的系统从不需要什么狗。再说谁都会玩,大街上随便拉一个来就行了。所长还要自己亲自做看门狗?
    劝一句:
   “韦编三绝今知命;黄绢初裁好著书。”
highgear 发表于 2010-6-25 21:01 | 显示全部楼层
冷漠你少来东厂的那一套。给你说过多少遍了, 你不懂就不要装懂。你楼上胡扯来胡扯去, 不过是为了装13而已, 你不装你会死么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

505

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部