【问题标题】:How to choose proper watchdog timer value如何选择合适的看门狗定时器值
【发布时间】:2018-07-31 23:20:20
【问题描述】:

问题是:

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

说:

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

Task2:中等优先级,执行。时间 = 10 毫秒

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

【问题讨论】:

  • 您有什么要求?如果您的要求是“系统应在至少 5 分钟后检测到挂起的任务”,则为 5 分钟。
  • 我是建系统的,所以我需要知道如何正确设置这个要求
  • 那么,您希望以多快的速度从崩溃中恢复?对于大多数类型的设备, 是可以的。通常绝对不需要将看门狗与任何任务循环时间对齐,并且当您更改程序并因此循环计时时遇到不必要地触发的看门狗问题。
  • 尽可能快。那么,我应该为系统的整个时间段配置 WDT 吗?还是为了最长的任务?
  • 它比这更复杂,因为你想要所有正在运行的任务的 OR - 如果没有任务间通信,这将无法工作。这在很大程度上取决于您的任务相互依赖的程度。

标签: embedded avr rtos watchdog


【解决方案1】:

正确的做法是

  1. 创建一个特殊的看门狗任务,它在循环中(按顺序)等待 3 个信号量/互斥体/消息队列
  2. 为您的工作任务提供这三个信号量(每个任务提供一个看门狗任务的信号量)
  3. 将看门狗任务循环中的看门狗计时器重新设置为所有工作任务(最坏情况)的循环时间之和加上一些余量。

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

【讨论】:

  • .. 并将 dog 任务设置为最高优先级,以防止更高优先级的线程陷入循环,从而通过饿死 CPU 执行的可怜的 pup 来防止狗咬伤。
  • @MartinJames 正是当 WD 任务没有获得 CPU 时,WD 将触发。这就是我们想要的 - 如果更高优先级的线程卡在循环中,我们想要 WD 启动 - WD 任务的优先级实际上并不是很相关,只要它得到 some i> CPU 在良好情况下保持系统活跃。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多