Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Embedded 如何选择合适的看门狗定时器值_Embedded_Avr_Rtos_Watchdog - Fatal编程技术网

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

Embedded 如何选择合适的看门狗定时器值,embedded,avr,rtos,watchdog,Embedded,Avr,Rtos,Watchdog,问题是: 如果我有3个具有不同优先级和不同执行时间的任务,我应该如何配置看门狗计时器 说: 任务1:最高优先级,执行。时间=5毫秒 任务2:中等优先级,执行。时间=10毫秒 任务3:最低优先级,执行。时间=15毫秒看看这个定义 看门狗定时器是一种电子定时器,用于检测计算机故障并从中恢复。在正常运行期间,计算机会定期重置看门狗计时器,以防止其超时 因此,您可以设置看门狗定时器值,当您确定3个任务都没有运行时,该值将触发看门狗。更准确地说,您可以在确定所有任务都在运行时重置计时器。当单个任务由于未知

问题是:

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

说:

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

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

任务3:最低优先级,执行。时间=15毫秒看看这个定义 看门狗定时器是一种电子定时器,用于检测计算机故障并从中恢复。在正常运行期间,计算机会定期重置看门狗计时器,以防止其超时

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


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

正确的方法是

  • 创建一个特殊的看门狗任务,在一个循环中(按顺序)等待3个信号量/互斥量/消息队列
  • 从工作任务中输入这三个信号量(每个任务输入看门狗任务的一个信号量)
  • 将看门狗任务循环中的看门狗计时器重新设置为所有工作任务(最坏情况)的循环计时加上一些净空的总和

  • 如果您的任何辅助任务或看门狗任务挂起,它将最终阻止看门狗任务,看门狗将过期。您希望确保只有在所有任务正常运行时才重新触发看门狗。使用RTO提供的最简单的任务间通信方式,使其尽可能可靠地防止崩溃

    你的要求是什么?如果您的要求是“系统应在至少5分钟后检测到挂起的任务”,则为5分钟。我是构建系统的人,因此我需要知道如何正确设置此要求。那么,您希望从崩溃中恢复的速度有多快?对于大多数类型的设备,秒是可以的。通常情况下,绝对不需要将看门狗与任何任务循环时间对齐,并且在您更改程序和循环计时时,会遇到不必要触发看门狗的问题。请尽可能快。那么,我应该为系统的整个时间段配置WDT吗?或者对于最长的任务?它比这更复杂,因为您需要运行所有任务的or-如果没有任务间通信,这将无法工作。这在很大程度上取决于你的任务之间的相互依赖程度。。。并将dog任务设置为最高优先级,以防止被卡在循环中的高优先级线程通过耗尽可怜的pup的CPU执行来阻止dog咬伤。@MartinJames确切地说,当WD任务没有获得CPU时,WD将触发。这就是我们想要的——如果一个更高优先级的线程被卡在循环中,我们希望WD启动——WD任务的优先级实际上不是很相关,只要它得到一些CPU来保持系统在良好的情况下保持活动。