在多任务环境中为看门狗提供服务的策略

Tra*_*ggs 18 embedded freertos

将一些嵌入式代码移到FreeRTOS之后,我对这个看门狗留下了一个有趣的困境.看门狗定时器是我们应用的必备条件.使用FreeRTOS对我们来说也是一个巨大的福音.当应用程序更加单一任务时,它会在其逻辑流程中及时为监督者提供信息,这样我们就可以确保任务及时地取得逻辑进展.

虽然有多项任务,但这并不容易.由于某种原因,一项任务可能会受到限制,而不是取得进展,但另一项任务正在做得很好并取得足够的进展以保持看门狗愉快地享受.

一种想法是单独启动一个单独的任务来提供看门狗,然后使用一些计数器,其他任务定期增加,当看门狗任务打勾时,它将确保所有计数器看起来像是在所有其他计数器上进行任务,如果是这样,请继续为看门狗提供食物.

我很好奇其他人在这样的情况下做了什么?

kkr*_*mbo 9

监视所有其他任务状态的监视任务是一个很好的解决方案.但是,不要使用计数器,而是考虑为每个任务使用状态标志.状态标志应该有三个可能的值:UNKNOWN,ALIVE和ASLEEP.当周期性任务运行时,它将标志设置为ALIVE.阻止异步事件的任务应在阻止之前将其标志设置为ASLEEP,并在运行时将其设置为ALIVE.当监视程序监视器任务运行时,如果每个任务都是ALIVE或ASLEEP,它应该启动监视程序.然后看门狗监视器任务应将所有ALIVE标志设置为UNKNOWN.(ASLEEP标志应保持ASLEEP.)具有UNKNOWN标志的任务必须运行并将其标志设置为ALIVE或ASLEEP,然后监视器任务才会再次启动监视程序.

有关更多详细信息,请参阅本文的"多任务"部分:http: //www.embedded.com/design/debug-and-optimization/4402288/Watchdog-Timers