减少空闲任务的资源使用

时间:2010-06-13 04:30:47

标签: multithreading real-time embedded-resource rtos multitasking

我发现在uC / OS-II RTOS中,当没有其他任务准备好运行时,会有一个空闲任务被执行。如果空闲任务可以消耗资源,我们如何减少它呢?

2 个答案:

答案 0 :(得分:3)

通常,空闲任务是处理器进入低功耗(睡眠)模式的地方,如果它是低功耗系统并且处理器具有这种模式。这通常是一个特定的汇编指令,例如在ARM Cortex M3上执行“WFI”指令。在其他芯片上,核心外部可能有一个特定的寄存器来管理电源(而不是指令)。

请注意,在进入低功耗模式之前,通常存在条件(必须满足要求)。有时你需要在入睡前锁定中断,有时解锁;检查芯片的数据表。

通常在进入低功耗模式之前,您将关闭所有不需要的外围设备。再次,检查芯片的数据表。此外,如果您要使用中断唤醒,请确保外设未断电,并且中断已启用,否则您将无法唤醒。

最后一点:通常在调试时(例如在JTAG设备的控制下),进入低功耗模式时会发生奇怪的事情,因此您希望在调试时禁用空闲任务中的“休眠”,并且只在没有运行时执行此操作调试器。通常这是一个编译时决定(#ifdef ...)

答案 1 :(得分:1)

典型的空闲循环很可能只占用很少的处理器门,因此在核心中消耗很少的功率,但如果它很关键,你可以在空闲循环中调用睡眠模式,这样就不会执行任何代码 - 核心就是停止了。但是,维持实时响应可能会使外围设备保持供电并能够产生中断,因此在实践中可能会带来最小的好处。

就其他资源而言,空闲循环通常只是当前指令的分支;一条指令,没有数据;它不能比那个小得多。提供了uC / OS-II的源代码,所以你可以看一下!

当然,如果您通过直接修改空闲任务或实现挂钩来扩展空闲任务,那么资源使用完全在您的控制之内,但您无法获得任何东西。