跳转到主内容
Knowledgebase
Home
Renesas Electronics China - Knowledgebase

看门狗定时器基本知识

最新更新:2011年10月 06日

Question:

看门狗定时器基本知识

Answer:

(1)引言

相信大多数人都遇到过这样的情形:他们每天使用的计算机出现"挂起"或"死机",即由于某种原因停止工作(反复执行一个未指定的操作,或者停止操作且不接收任何指令)必须重启。在大多数情况下,用户知道计算机的工作状态,能够识别已经发生故障,并采取适当措施(重启)。

 



嵌入式微控制器应用是指什么? 用户通常不是专家。事实上,用户甚至并未意识到正在使用微控制器。如果用户发现有问题,他们可能会采取措施,如从墙面插座上拔下插头。但是不可能一直监控应用程序,而且期望用户采取正确的决定并执行适当的处理并不合理的。

与此同时,应用程序正变得越来越大和越来越复杂。这使得即使设计人员要完整理解程序的每个部分也是很困难的。因此,要在程序设计中对可能出现的程序故障采 取措施是不可能的(对于初学者,在考虑对策之前,首先必须提高程序的实现水平)。如果 不能单单从程序采取对策,必须寻求硬件的帮助。
用于监控程序正常操作的具有代表性的硬件功能就是看门狗定时器。

(2) 什么是看门狗定时器?
看门狗定时器(简称WDT)是一种简单的定时器用于监视程序是否正常操作。定时器可以由正在被监控的程序清零,但不能被停止。当看门狗定时器溢出时,会产生WDT中断或复位。
正常情况下,看门狗定时器会被定期清零,以防止溢出而产生的WDT中断或复位。下图说明了看门狗定时器的操作过程。如图所示,与其它功能不同,正确使用WDT意味着它不操作(看门狗应当不出声)。


(3) WDT结构和操作 (概述)
看门狗定时器可以被清零但不能被停止(即它是无限运行的定时器)。一旦启动,看门狗定时器就持续地对指定的时钟计数。下图给出了看门狗定时器的操作过程 图。从启动到溢出的时间是由水滴的频率(计数时钟的频率)决定的。当开始储水(时钟开始计数)时,如果水容器的底部被打开,即在水(定时器)溢出之前放水 (对定时器清零),就没有问题了。但是,如果有人忘记放水了,或者没有及时放水,并产生溢出,则就要打开引爆炸弹的开关(产生复位)。这一过程会促使对程 序故障进行检测。



(4) 怎样使用WDT (概述)
当程序正常操作时,如果定时对WDT清零,则将WDT设计为不需进行操作。



(5) WDT的局限
一旦程序挂起,或出现了其它故障,WDT就无法定期清零。这会引起WDT中断或复位(狗叫了),从而进行故障检测。但是,如果即使出现程序故障,WDT仍继续按规定清零,则无法对该故障进行检测。



之所以会出现这种情况是因为没有重视对WDT的清零操作,就好像夜贼在给一个顽皮的看门狗喂肉吃,那么这只狗只知道摇摆它的尾巴而不会吼叫。毫无疑问WDT是不安全的。
而且有些微控制器的内部WDT在初始化的时候就停止了(狗睡着了),所以无法工作(不能起到正常的保护作用),除非把它激活(把狗叫醒)。

(6) 目前的看门狗定时器
如今的微控制器中的看门狗定时器已经克服了上面提到的局限性,而且更方便使用。主要改进之处如下所示。

  • 除非向看门狗定时器写入特定的数据参数,否则不能对它清零;如果写入的是其它值就会产生复位。
    (除非给狗喂经常吃的食物,否则它就会咬人。)
  • 严格规定WDT清零时序,如果定时器以其它时序清零则会产生复位。
    (如果狗不饿的时候给它喂食,它就会咬人。)
  • 使用不能停止的专用时钟启动WDT。
    (狗一直醒着,看护财产。)
今后会有进一步的改进措施。

(7) 使用注意事项
使用WDT时需要重点关注的是在其溢出之前可以使用多长时间以及定时器清零的时序。如果溢出前的时间很短,那么定时器就必须经常清零,这样会增加对系统的限制(看见狗一饿就必须喂它,这样主人就不能离开屋子)。
但是如果清零时间设置得过于接近溢出,那么定时器可能会因为硬件变化,如计数时钟的变化,或者软件变化,如按照程序处理内容的执行时间变化或因中断产生的不同步,而无法按时清零。因此,在设计系统时必须考虑这些问题以保证WDT即使在最坏的情况下也不发生溢出。
此外,也要考虑当CPU停止,如进入待机模式时,应当如何处理WDT。
常犯的错误是对WDT清零赋予最高优先级,这样做过于简单,会出现诸如在定时器中断期间对WDT清零的情况(需要时才给狗喂食是一种痛苦,所以使用自动喂食机给狗喂食, 以使它从来不会感到饥饿)。这绝对是狗摇摆尾巴的时候。

(8) 小结
WDT功能并不完善,要使WDT能够有效操作需要对程序有完整的理解。但是,如果用户掌握了WDT的操作,了解了它的局限性,就可以把它作为程序故障检测的有效手段。
Suitable Products