先来介绍下看门狗的大概概念
看门狗有点类似于定时器中断,有寄存器设置对系统时钟分频,比方说系统时钟256分频就是系统每256个时钟,看门狗计数器自加1,然后两个寄存器用来放看门狗计数器的值(一般51是16位),当看门狗计数器溢出,就会产生如同按下RESET键的效果,即重启,程序从头开始.
所以通过看门狗计数器分频设置,可以知道看门狗溢出时间,比如1秒,那么只要写一个小函数,用来清0看门狗计数器
然后保证程序运行中任意1秒内这个函数至少被执行一次,就能保证程序的正常运行.这个动作也就是俗称的喂狗.
当你程序跑飞,如果跑进死循环里,看门狗只要溢出,能帮你重启.但是之前没保存的数据消失,但是如果跑飞但是没有跑进死循环,只要后面碰到喂狗语句前看门狗计数器不溢出,那么看门狗是不会发现程序跑飞的.所以说发现程序跑飞完全靠看门狗不现实.不过可以通过一些技巧来尽量发现程序跑飞,这个就不是三言两语能说清楚的了,网上有这方面的文章感兴趣的可以搜索下.
因为看不到你的硬件和具体的工作环境,所以只能给你提供一个思路.
如果同型号的设备,一个OK另外一个不行,感觉上应该是硬件问题.最好检查下有故障那台的板子上有没有什么异常情况.比如电解电容失效之类的.
如果故障能重现,那么就顺藤摸瓜,但是感觉故障出现随机性,试着站在更高点的角度观察故障,比如当故障发生时周边环境有没有变化(是否附近的设备的电机启动或者停止,是否附近有日光灯开启等等),如果有试着顺着这个思路去证明或者否定. |