0

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

4

2 回答 2

3

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

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

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

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

于 2010-06-13T14:09:02.427 回答
1

一个典型的空闲循环可能会使用很少的处理器门,因此在内核中消耗很少的功率,但如果它很关键,您可以在空闲循环中调用睡眠模式,这样根本不会执行任何代码 - 内核只是停止。然而,为了保持实时响应,外围设备可能会保持供电并能够产生中断,因此实际上收益可能很小。

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

当然,如果您通过直接修改空闲任务或实现挂钩来扩展空闲任务,则该资源使用完全在您的控制范围内,但您不能白费。

于 2010-06-13T19:51:00.857 回答