【问题标题】:Idle time in RTOSRTOS 中的空闲时间
【发布时间】:2017-02-08 04:26:22
【问题描述】:

由于空闲任务一般用于安全消耗其他软件不需要的CPU时间,如果没有空闲任务会怎样? RTOS 会自动创建一个吗?另外,空闲任务除了消耗时间还有什么其他用途?

【问题讨论】:

    标签: rtos


    【解决方案1】:

    如果没有空闲任务会发生什么? RTOS 会自动创建一个吗?

    我怀疑是否有任何 RTOS 可以做到这一点。如果没有空闲任务,则可运行任务列表将为空,调度程序可能会崩溃。通常,空闲线程存在的一个最重要的原因是使可运行任务列表“永不为空”。这样就简化了调度器的代码。

    另外,空闲任务除了消耗时间还有什么其他用途?

    在某些系统中,空闲任务可以执行一些低优先级的活动(例如一些垃圾收集)。它还可以将内核切换到低功耗模式,尤其是在嵌入式设备上。在这种情况下,当空闲任务运行时,意味着没有什么可做的,因此可以停止内核并等待下一个事件(硬件中断或超时),而无需使用太多功率。当下一个事件到达时,内核被硬件唤醒并处理该事件。一些“正常”线程将开始运行,或者 - 如果仍然无事可做 - 空闲线程将恢复并再次切换到低功耗模式。

    【讨论】:

    • 感谢您的详细解答!
    【解决方案2】:

    如果 CPU 时钟正在运行,则必须执行指令;如果没有空闲任务,那么你的操作系统就坏了。空闲循环是 RTOS 的固有部分,而不是用户任务,因此 RTOS 不需要“自动创建”。

    永不让步的低优先级用户任务将阻止空闲循环运行;这不一定是一件好事。这样的任务与空闲循环不同。一方面,RTOS 支持的任何 CPU 使用工具都会报告 100% 的使用率,如果这样的任务被取消 - 不包括空闲循环的执行是 CPU 使用率,因为 CPU 总是准备好在空闲时响应任何中断事件 -循环不会导致任何就绪任务延迟。

    空闲任务或“空闲循环”通常就是这样,当没有其他事情可做时程序计数器设置为空循环。在某些架构中,循环可能包括停止内核执行(停止为内核计时)以降低功耗的“等待中断”指令。由于任何上下文切换都必须发生中断,因此如果支持 WFI,处理器可以在此循环中停止。

    一些 RTOS 支持空闲循环的用户挂钩;可以在空闲循环上下文中在后台运行的低优先级运行到完成函数。

    【讨论】:

      【解决方案3】:

      空闲任务除了消耗时间还有什么其他用途?
      最常见的是,它做了两件事:
      1. 垃圾(资源)收集或清理
      2. 采取措施降低功耗

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 2014-06-30
        • 2018-12-13
        • 2016-09-01
        • 2012-09-20
        • 2011-05-19
        相关资源
        最近更新 更多