在嵌入式系统开发中,看门狗是一种重要的机制,用于在程序异常时自动重启系统,保障其稳定性。本文将深入探讨看门狗及其在程序稳定性中的作用,帮助您更好地理解和应用看门狗技术。
看门狗
首先需要明确一点:看门狗并不能直接提升程序本身的稳定性和可靠性。它仅能在程序运行出现异常时,通过重启应用或系统来恢复功能。程序的稳定性和可靠性,从根本上来说,取决于编程过程中的规范性和严谨程度。
看门狗主要分为硬件看门狗和软件看门狗,二者在实现方式和使用场景上存在显著差异。
1. 硬件看门狗
硬件看门狗的核心是一个定时电路,由被监控的CPU提供周期性的“清狗”信号,即“喂狗”,以清零定时器。在CPU正常工作时,能够定时“喂狗”,因此看门狗内的定时器不会溢出。一旦CPU出现故障,无法继续提供“喂狗”信号,看门狗内的定时器就会溢出,触发复位信号,导致CPU重启,俗称“被狗咬”。硬件看门狗又可分为两种类型:1.1 外部独立硬件看门狗这种看门狗独立于MCU/MPU之外,无需驱动程序支持,只需在规定时间内为喂狗引脚提供一个电平变化即可,通常通过GPIO实现电平切换。其喂狗时间不可设置,一旦硬件连接完成,就无法关闭,除非断开硬件连接。这种看门狗具有极高的可靠性,适用于对产品可靠性要求极高的场合。不过,由于它是独立的硬件设备,因此会增加一定的硬件成本。
外部独立硬件看门狗,主要用于解决恶劣外部环境导致系统死机且无法人工干预的问题,也能应对硬件故障引发的系统死机重启需求。
1.2 内置硬件看门狗内置硬件看门狗是利用处理器内部的定时器实现定时操作。它需要在系统中编写驱动程序,初始化定时器并实现喂狗操作,甚至可以调整定时器的参数。这种看门狗的喂狗时间可调,还可以通过特殊指令关闭,成本较低。然而,在处理器死机的情况下,它可能会失效,因此适用于对硬件可靠性要求不是特别严格的场合。
内置硬件看门狗,系统驱动+应用程序喂狗,主要用于解决应用程序问题引起的复位重启,也能应对部分外部环境导致的复位重启。
2. 软件看门狗
软件看门狗的原理与硬件看门狗类似,只是将硬件电路上的定时器替换为处理器的内部定时器。这种方式可以简化硬件电路设计,但在可靠性方面不如硬件定时器。例如,如果系统内部定时器自身发生故障,就无法检测到问题。虽然可以通过双定时器相互监视来提高可靠性,但这不仅会增加系统开销,也无法解决所有问题,比如中断系统故障导致定时器中断失效。
软件看门狗,系统驱动+应用程序喂狗,主要用于监控应用程序死机问题。
看门狗的正确使用
看门狗本身并不是用来解决系统出现的问题。在调试过程中发现的故障,应该通过排查设计本身的错误来解决。加入看门狗的目的是应对程序潜在错误和恶劣环境干扰等因素导致的系统死机,在无人干预的情况下自动恢复系统正常工作状态。然而,看门狗也不能完全避免故障造成的损失。毕竟从发现故障到系统复位恢复正常这段时间内,系统会处于停滞状态。此外,一些系统还需要在复位前保护现场数据,并在重启后恢复现场数据,这可能需要额外的软硬件开销。
可靠性排序与喂狗操作
综合来看,看门狗的可靠性排序为:外部独立看门狗 > 内置硬件看门狗 > 软件看门狗。
对于喂狗操作,外部独立看门狗由系统自动完成,应用程序无需关心。而应用程序需要喂的狗要么是内置硬件看门狗,要么是软件看门狗,这取决于平台本身提供的资源。
应用程序必须在规定时间内进行喂狗操作,以监控程序本身的运行健康状况。如果程序编写不当导致异常不喂狗,就会引发系统复位重启。这就需要程序开发人员进行问题定位和排查,解决可能影响系统运行的各种潜在问题。
D9系列Cortex-A55®核心板 | |
四/五核Cortex-A55
UART*16 CAN FD*4 千兆以太网*2 |