从一开始设计单片机程序以来我一直在问自己看门狗究竟应该如何使用?并不断的寻
找权威答案。以下谈一下个人在这些年来对看门狗应用相关的一些思考和观点,错误不可避
免,愿讨论并改正。
1. 什么是单片机的程序跑飞? 什么是单片机的死机?
所谓的程序跑飞是指 CPU 程序寄存器PC 异常改变,从而CPU 不按预定的顺序执行程
序,导致不可遇见的执行结果。
所谓的死机是 CPU 进入一个循环程序后因条件不满足而无法退出,使得其它程序得不
到执行。
导致单片机程序跑飞和死机的原因可能是软件本身的错误,也有可能是电磁干扰,软件
原因导致的故障应通过改进软件的方法来解决,而担心干扰对系统的影响可使用看门狗电路
来做一层防护。
干扰究竟是什么样的东西,如何产生的?这个问题实在太难了,我说不清楚。那么干扰
究竟对单片机做了些什么?这个问题很重要,想象一下可能很简单,我想、干扰唯一能做的
就是改变了单片机内部的随机存储器(包括各种寄存器和内部RAM),例如改变了PC 那就
是程序跑飞,改变了一些变量(RAM)那就是死机。我始终认为干扰直接改变程序存储器
(FLASH)或数据存储器(EEPROM)的可能性很小。
另外,我无法证实 PC 寄存器受干扰改变的几率会比一个普通RAM 变量受干扰而改变
的几率更高,这样、我们就会得到一种结果:在我们整天谈论的程序跑飞现象在死机现象面
前是那么的微不足道,或许我们所遇到的大多数“跑飞”可能就是“死机”或下面要讲的“误
动作”。
2. 看门狗工作原理
看门狗就是一个计数器,有一个输入用于复位计数值,有一个输出用于计数溢出时复位
单片机,单片机程序应在计数器溢出前对其进行复位操作(这个过程也叫喂狗)否则自己将
遭到复位。看门狗通常的用法是在主循环里加一个喂狗指令,当单片机遭遇死机或程序跑飞
时这个喂狗指令得不到执行,直到看门狗计数器溢出复位单片机,这样即达到了当单片机遇
到死机时能让它重新执行的目的。
看门狗复位相当于硬件复位,所有的寄存器将恢复上电时的默认值,这与软件调用0
地址的主要区别,应当注意。
3. 中断喂狗如何看待
针对一个典型的前后台系统,中断喂狗简直就是个玩笑,除非整个系统没有后台程序,
中断处理所有的事情。思路有点不清析哦☺
4. 更可怕的现象:误动作(包括不动作)
干扰既然能改变PC 寄存器和RAM,那自然也有可能改变决定输出的相关变量甚至是输
出寄存器本身,此种情况正是最可怕的误动作,在一个系统中它的概率不会低于程序跑飞和
死机现象,在一般的软件结构中看门狗对它也是无能为力。因此看门狗只能算作是系统的一
道无力防线,系统的稳定还是要靠可靠的硬件设计,软件系统应建立在可信赖的硬件之上,
不应无限扩大看门狗在抗干扰方面的作用。
根据以上分析可以认为看门狗在一个不稳定的系统中起到一个降低故障率的作用,而不
能彻底解决问题。而在大部分稳定系统中看门狗只是一个定心丸。
既然选择了单片机开发,那么抗干扰是我们必经的一条路!