基于 RTOS 的低功耗设计思路。
越来越多的嵌入式产品基于 RTOS 作为软件平台, 有些产品对低功耗的要求也越来越高, 本文讨论一下如何在 RTOS 中处理微控制器的低功耗特性。聊一聊:本文只简单讨论一下设计思路,更详细的设计,需要查阅所使用的 RTOS 相关文档资料。RTOS 一般采用基于时间片轮转的抢占式任务调度机制,在实际应用过程中,一般的低功耗设计思路如下:
当 Idle 任务运行时,进入低功耗模式;
在适当的条件下,通过中断或者外部事件唤醒 MCU。
当 OS 系统定时器产生中断时,会将 MCU 从低功耗模式唤醒。而频繁进入/推出低功耗模式,使得 MCU 无法进入深度睡眠。Tickless Idle Mode 的设计思想在于尽可能地在 MCU 空闲时使其进入低功耗模式。从上述情景中可以看出,软件设计需要解决的问题有:1、合理地进入低功耗模式(避免频繁使 MCU 在低功耗模式和运行模式下进行不必要的切换)。RTOS 的系统时钟源于硬件的某个周期性定时器(Cortex-M 系列内核多数采用 SysTick),RTOS 的任务调度器可以预期到下一个周期性任务(或者定时器任务) 的触发时间。调整系统时钟定时器中断触发时间,可以避免 RTOS 进入不必要的时间中断,从而更长的时间停留在低功耗模式中,此时 RTOS 的时钟不再是周期的而是动态的(在原有的时钟基准时将不再产生中断,即 Tickless)。2、当 MCU 被唤醒时,通过某种方式为系统时钟提供补偿。MCU 可能被两种情况所唤醒,动态调整过的系统时钟中断或者突发性的外部事件,无论是哪一种情况,都可以通过运行在低功耗模式下的某种定时器来计算出 MCU 处于低功耗模式下的时间,在 MCU 唤醒后对系统时间进行软件补偿;3、软件实现时,要根据具体的应用情景和 MCU 低功耗特性来处理问题。尤其是 MCU 的低功耗特性,不同 MCU 处于不同的低功耗模式下所能使用的外设(主要是定时器) 是不同的, RTOS 的系统时钟可以进行适当的调整。 |