看门狗
定时器电路
监控定时器,即看门狗(WatchDog Timer,WDT),分外部看门狗和内部看门狗外部看门狗(亦称硬件看门狗);具有独立时钟源的外部定时器电路,超时产生复位信号,内部看门狗(亦称软件看门狗);集成在处理器内部的可编程定时器,超时产生超时中断。
当系统运行时受到外界干扰,例如电源电压的波动、环境中的EMI干扰或系统设计中存在的缺陷等,有可能造成DSP程序发生死循环(俗称“程序跑飞”),发出错误的指令使设备损坏甚至威胁人身安全,看门狗单元可以使系统自动复位,使系统可靠运行,提高安全性。
目前,在很多单片机和DSP芯片中都集成有看门狗单元,又称为看门狗定时器。如果看门狗单元没有被禁用,则在系统运行以后,看门狗定时器的计数器开始自动计数:如果到了一定的时间还不去清除看门狗计数器(俗称“喂狗”,或“踢狗”Kick Dog),那么看门狗计数器就会溢出从而引起看门狗中断,强行系统复位。利用这种机制,看门狗单元可以防止单片机或者DSP芯片的程序发生死循环,监测软件和硬件的运行状态,从而提高系统的可靠性。
定义
看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机。看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
基本原理
看门狗是一种监控系统的运行状况的手段,通过软硬件结合的方式实现对系统运行状况的监控。稳定运行的软件会在执行完特定指令后进行喂狗,若在一定周期内看门狗没有收到来自软件的喂狗信号,则认为系统故障,会进入中断处理程序或强制系统复位。系统上电后根据不同的工作模式可以选择使能看门狗的时机,若看门狗被使能则计数器开始计数,如果在设定的时间内没有及时喂狗则会发生看门狗超时。看门狗主要由寄存器、计数器和狗叫模块构成:通过寄存器对看门狗进行基本设置,计数器计算狗叫时间,狗叫模块决定看门狗超时后发出的中断或复位方式。
应用
看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
分类
硬件看门狗
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等。
软件看门狗
而在某些情况下,也会采用纯软件的方法来设置看门狗,如在单片机系统中,利用闲置的定时器/计数器就可以设计一个软件看门狗。具体实现步骤如下:
首先,在初始化程序中设置定时器/计数器的方式以控制寄存器(TMOD)和定时时间的初值,并且打开中断。
然后,根据定时器的时间,在主程序中按一定的时间间隔插人复位定时器的指令(喂狗),两条喂狗指令之间的时间间隔可以根据系统时钟与指令周期计算出来,而且该时间周期应该小于定时器的定时时间。
最后,在定时器的中断服务程序中,设置一条无条件转移指令,将程序计数器PC转移到初始化程序的入口。
在非单片机系统,如PowerPC系统中,也可以采用多线程的方式来设置软件狗,其主要的步骤如下所述:
首先,新建一个看门狗线程,该线程维护一个全局变量数组,该数组相当于每个工作线程的计数器。看门狗线程为一一个死循环,每隔一段时间就会循环一次,并将全局变量数组的每一个值都加1后判断是否超过预定义的上限值,若发现某个线程对应的变量数值超过最大值,则看门狗线程会重置该线程。
然后,每个工作线程中,每隔一段时间就会将对应的全局变量置0(喂狗)。
软件看门狗的优点是无需额外的硬件支持,但当系统存在严重的错误时(例如:中断服务出错),则有可能导致软件看门狗失效。
参考资料
看门狗定时器的设计与实施.中国知网.2019-06-09
目录
概述
定义
基本原理
应用
分类
硬件看门狗
软件看门狗
参考资料