【问题标题】:WDT in a preemptive RTOS kernel抢占式 RTOS 内核中的 WDT
【发布时间】:2019-10-08 04:52:14
【问题描述】:

我听说在抢占式内核中使用看门狗定时器的最佳方法是将其分配给最低的任务/空闲任务并在那里刷新它,但我不明白为什么,如果高优先级任务继续运行并且空闲任务在超时之前不会运行。

有什么说明吗?

谢谢。

【问题讨论】:

    标签: embedded rtos watchdog


    【解决方案1】:

    无法理解为什么,如果高优先级任务继续运行而空闲任务在超时之前没有运行怎么办。

    嗯,这就是重点。如果最低优先级的线程(或者更好的空闲线程)被饿死,那么您的系统将错过最后期限,并且设计不佳或发生了一些意外情况。

    如果它被重置为高优先级或中断,那么所有低优先级线程都可能处于故障状态,要么忙着运行,要么根本不运行,并且看门狗将被无用地维护,同时不提供任何保护。

    但这只是系统完整性监控的部分解决方案。它解决了错误任务占用 CPU 的问题,但它不处理任务阻塞和从未按预期安排的问题。有很多方法可以解决这个问题,但一种简单的方法是使用“软件看门狗”,每个任务都会重置计数器,并在高优先级定时器线程或处理程序中递减。如果任何线程计数器达到零,则相应线程阻塞的时间比预期的要长,并且可以采取行动。这要求每个线程以短于其看门狗计数器重置值的间隔运行。对于否则会无限期阻塞等待不常见的非周期性事件的线程,您可以使用阻塞超时来更新软件看门狗。

    【讨论】:

      【解决方案2】:

      看门狗任务的优先级没有绝对的规则。这取决于您的设计和目标。

      一般来说,如果看门狗任务是最低优先级的任务,那么如果任何更高优先级的任务卡住或消耗过多的 CPU 时间,它将无法运行(并且看门狗将重置)。考虑一下,如果高优先级任务 100% 的时间都在运行,那么这可能太多了,因为低优先级任务正在被饿死。如果较低优先级的任务被饿死,也许您希望看门狗重置。

      但这个总体思路并不是一个完整的设计。请参阅this answer,尤其是本文的“多任务处理”部分(https://www.embedded.com/watchdog-timers/)以获得更完整的看门狗任务设计。文章建议将看门狗任务设为最高优先级任务,但讨论了替代方案的权衡。

      【讨论】:

        猜你喜欢
        • 2018-09-16
        • 2015-03-05
        • 2022-09-28
        • 2014-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-10
        相关资源
        最近更新 更多