问题是:
如果我有3个不同优先级和不同执行时间的任务,我应该如何配置Watchdog Timer?
说:
任务1:最高优先级,执行。时间=5 ms
任务2:中等优先级,执行。时间=10 ms
任务3:最低优先级,执行。时间=15 ms
正确的方法是
- 创建一个特殊的看门狗任务,在循环中(按顺序(等待3个信号量/互斥对象/消息队列
- 从工人任务中提供这三个信号量(每个任务提供看门狗任务的一个信号量(
- 将看门狗任务循环中的看门狗计时器重新设置为所有工作任务(最坏情况(的循环定时加上一些余量的总和
如果您的任何工作任务或看门狗任务挂起,它最终将阻止看门狗任务,看门狗将过期。您需要确保只有当所有任务都正常运行时才重新触发看门狗。使用RTOS提供的最简单的任务间通信方式,使其在崩溃时尽可能稳健。
看看这个定义看门狗计时器是一种用于检测计算机故障并从中恢复的电子计时器。在正常操作期间,计算机会定期重置看门狗计时器,以防止其过期或"超时">
因此,您设置了看门狗定时器值,当您确定3个任务都没有运行时,该值会触发看门狗。更准确地说,您可以在确定所有任务都在运行时重置计时器。当一个任务由于未知原因停止时,你想触发看门狗(你可以在上面阅读更多(
现在真正的问题是,看门狗计时器的时间应该是多少?当你想重新启动程序时,你需要设置一个计时器,所以包括一个任务的所有等待时间、任务中的延迟,并检查所有任务至少执行一次的最坏情况时间(最长时间(。然后将计时器值设置为比这个最大值多一点。