如何选择合适的看门狗定时器值

How to choose proper watchdog timer value

问题是:

如果我有3个不同优先级和不同执行时间的任务,我应该如何配置看门狗定时器?

说:

任务 1:最高优先级,执行。时间 = 5 毫秒

任务 2:中优先级,执行。时间 = 10 毫秒

任务 3:最低优先级,执行。时间 = 15 毫秒

看看这个定义 看门狗定时器是一种电子定时器,用于检测计算机故障并从中恢复。在正常操作期间,计算机会定期重置看门狗定时器以防止其超时,或者 "timing out"

所以你设置看门狗定时器值,当你确定 3 个任务的 none 是 运行 时触发看门狗。更准确地说,当您确定所有任务都是 运行 时,您会重置计时器。当单个任务由于未知原因停止时,你想触发看门狗(你可以阅读更多)

说正题,看门狗定时器的时间应该是多少?当你想重新启动程序时你需要设置一个计时器,所以包括任务的所有等待时间,任务延迟并检查所有任务至少执行一次的最坏情况时间(最大时间)。然后将定时器值设置为比这个最大值大一点。

正确的做法是

  1. 创建一个特殊的看门狗任务,循环等待 3 semaphores/mutexes/message 个队列(顺序)
  2. 从你的工作任务中喂养这三个信号量(每个任务喂养看门狗任务的一个信号量)
  3. 将看门狗任务循环中的看门狗计时器重新设置为所有工作任务(最坏情况)的循环计时总和加上一些余量。

如果你的任何工作任务或看门狗任务挂起,它最终会阻塞看门狗任务并且看门狗将过期。您要确保仅在 所有任务 运行 正确 时才重新触发看门狗。使用最简单的任务间通信意味着您的 RTOS 提供了尽可能强大的抗崩溃能力。