看门狗是嵌入式软件经常遇到的一个名词.

它是什么?干什么用的?

其实看门狗很简单,它是监视CPU程序运行的,它可能集成到MCU的内部,也可能用外部专门的芯片来实现这个功能。它可以用软件实现(软件看门狗),也可以硬件实现(硬件看门狗)。

它是怎么实现CPU程序的运行呢?

      由于CPU的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对CPU运行状态进行实时监测的考虑,出现了这个看门狗的应用。

      在前一阶段我做的项目中,用的是外部硬件看门狗,关于硬件看门狗的软件实现,主要考虑硬件看门狗的接口方式和清狗方式。我用的MCU芯片有专门的外部看门狗接口,因此接口部分就不用软件考虑了,硬件就可以实现了。我们软件中只要考虑清狗方式的实现,在实现上,我采用了IO管脚清狗方式,通过IO的上升和下降沿来对看门狗芯片的清狗,避免程序被狗咬死(会导致程序复位)。

    在项目的调试阶段,我们遇到了程序反复复位问题。

    当时分析,问题原因可能有以下两点:

    1.看门狗的清狗时间过长

    2.程序挂死

    我们把看门狗芯片的复位管脚与CPU的管脚连线断开,程序可以正常运行,这样就可以确认是由于原因1导致的。为了确认执行哪段程序导致的清狗超时(出现问题的地方还未引入操作系统不能启动TASK或者中断isr进行清狗只能在函数内部通过调用清狗函数来手动清狗),我用了以下两种方法定位:

   1.利用未使用的IO管脚,通过示波器观察清×××脚波形和IO管脚的波形,来确认在执行哪段程序中出现了问题。

   2.利用MCU的内部Time资源来定位。