本期话题
基于 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
的系统时钟可以进行适当的调整。
觉得文章不错,点击“分享”、“赞”、“在看” 呗!