为嵌入式系统设计出色的看门狗定时器

这是一篇关于嵌入式系统中看门狗定时器(Watchdog Timers)的文章,作者 Jack Ganssle 通过多个案例和分析,探讨了看门狗定时器的重要性、不同类型(内部和外部)的特点以及在多任务系统中的应用等方面。

主要观点

  • 看门狗定时器是嵌入式系统防止固件故障的最后防线,应正确设计,然而很多设计存在问题。
  • 太空等恶劣环境及地面系统中都可能出现固件故障,如 Clementine 航天器的事故,说明看门狗定时器的重要性。
  • 内部看门狗定时器存在多种问题,如易被失控代码干扰、不能可靠产生复位等;外部看门狗定时器有更复杂有效的设计。
  • 优秀的看门狗定时器应独立于主系统,能检测各种软件和硬件故障,将系统恢复到正常状态并留下调试信息。
  • 在多任务系统中,应将看门狗融入所有任务,通过状态机等方式确保系统的稳定性。
  • 一些微控制器(MCU)上的看门狗设计在不断改进,但仍存在一些问题。

关键信息和重要细节

  • Clementine 航天器事故:1994 年 5 月 7 日,Honeywell 1750 处理器出现浮点异常,随后数据异常并冻结,最终因失控的代码打开 thrusters 耗尽燃料,任务失败。虽设计了软件 thruster 超时,但未使用内置看门狗定时器,说明其重要性。
  • 内部看门狗定时器特点

    • TI 的 Stellaris 系列控制器的锁存寄存器易被解锁;Toshiba 的 TMP96141AF 部分产生非屏蔽中断但不能单独产生复位;Motorola 的 68332 和 Coldfire 部分对看门狗控制寄存器的写入有要求,且无外部超时指示,需硬件复位。
  • 外部看门狗定时器特点:如 TI 的 UCC3946 和 Maxim 的 MAX823 等简单,易被失控代码干扰;而 TI 的 TPS3813 和 Maxim 的 MAX6323 是“窗口看门狗”,需在特定时间内触发,可减少失控程序产生复位的机会。
  • 优秀看门狗定时器的特点:独立于主系统,能检测各种故障,复位整个系统,留下调试信息,不依赖 CPU 时钟,防止软件重编程等。
  • 在多任务系统中的应用:构建看门狗任务,通过数据结构监测每个任务的运行情况,可通过添加最小和最大字段来更精确地监测任务,还可通过编译时开关进入调试模式收集数据。
  • 一些 MCU 上的看门狗设计:如 Freescale 的 32 位 Coldfire+系列的“Computer Acting Properly”(COP)机制,在特定时间写入特定序列才有效,且能检测非法指令;ST Microelectronics 的 Cortex-M3 设备的窗口看门狗等。

总结而言,看门狗定时器在嵌入式系统中至关重要,应根据系统需求选择合适的类型和设计,以提高系统的稳定性和可靠性。

阅读 10
0 条评论