在嵌入式软件开发中,我们会经常使用看门狗(watchdog)定时器来监控和恢复因程序跑飞或者死锁等故障造成的系统问题。而在MCU中,常用的看门狗一般是硬件看门狗定时器,主要包括独立看门狗(IndependentWatchdog, IWDG)和窗口看门狗(Window Watchdog, WWDG),在MCU的数据手册里,也都能看到这两种看门狗的详细介绍。 既然有两种看门狗,那在使用方式或者应用场景上肯定有所区别,接下来就对两种看门狗的区别和使用进行一些说明。 独立看门狗: 有独立的时钟源,其时钟源一般为MCU内部独立的低频时钟,通常为LSI(内部低速振动器),即使MCU主时钟失效了也可以正常工作。
当看门狗定时器的计数器从初始值递减到0时即会发生看门狗复位,因此一般只需要在超时前执行“喂狗”操作,也就是重载计数器即可,时间窗口要求相对宽松。下面是某款MCU的独立看门狗框图: 窗口看门狗: 时钟源一般依赖于系统时钟,如果系统时钟失效,则窗口看门狗定时器即会失效。
必须在特定的时间窗口内喂狗,比如0x3F~0x7F之间,过早或者过晚喂狗都会造成看门狗复位,因此窗口看门狗对喂狗的时机要求相对较高。下面是某款MCU的窗口看门狗框图: 以下将两种看门狗的主要特性写入表中,对比起来比较可能会更加直观: 总之,独立看门狗更“鲁棒”,窗口看门狗更“精确”,需要根据系统可靠性和实时性等需求选择合适的看门狗定时器。
|