PM 组件背景
随着物联网(IoT)的兴起,产品对低功耗的需求越来越强烈。例如作为数据采集的传感器节点,通常需要在电池供电时长期工作,还有一些产品需要在快速的响应网络功能的同时也能拥有较低的功耗。
与此同时,越来越多的 IoT 产品使用到了 RTOS,可是与传统裸机产品的低功耗处理相比,在 RTOS 平台上需要增加针对调度器内核做特殊处理,这就需要 RTOS 厂家提供低功耗相关的支持。
为了适应 IoT 的这种需求,RT-Thread 今天正式开源了电源管理(PM)框架。电源管理框架的理念是应用尽量透明,使得低功耗功能的使用更加简单。
RTOS 中的功耗
IoT 产品的功耗来源可以分成2部分,一部分是 MCU 内部的功耗,一部分是板载其他外设的功耗。而在 MCU 内的功耗又可以分成CPU 的功耗和片内外设的功耗。为了实现低功耗的功能,我们需要对它们进行合适的管理。
与传统的裸机不一样,在 RTOS 上对于功耗的处理主要是在系统进入空闲(idle)任务之后。此时 RTOS 处于空闲状态,可以进入不同的低功耗模式(这时 CPU 已经停止运行了)。与此同时,也可以根据实际产品的需求,选择性关闭不同的片内外设和板载外设。
在进入低功耗模式之后,MCU 可以被部分中断唤醒,例如它可以被低功耗定时器中断、唤醒按键中断等等。MCU 在被唤醒之后,系统需要保证依旧可以继续执行任务直到下空闲。
RT-Thread PM 组件介绍
为了在 RT-Thread 更好的实现低功耗功能,RT-Thread 开发了一套通用的电源管理(PM)组件,也就是大家常说到低功耗组件。该组件配合 RT-Thread 的设备管理框架,不仅对上层提供了丰富的接口,也使得底层驱动对于该组件的适配变得更加简单。
PM 组件的主要特点如下:
低资源占用
RT-Thread PM 组件资源占用极低,少使用情况:ROM 占用 0.8K,RAM 占用 0.1K ,非常适合对资源受限的嵌入式平台。
应用透明性
用户开启了低功耗组件后,应用代码基本不需要调整,PM 组件将在底层自动完成电源管理。这个特色功能主要用了下面两个技术:
tickless :当系统空闲时,系统会尽可能的延长下次 tick 的触发时间,保证 MCU 尽可能长的时间处于功耗模式;
时间补偿:当 MCU 唤醒时,系统的 tick 也会自动进行补偿处理,保证应用层获取到的 tick 依旧正常。
智能省电模式
MCU 通常可以运行在不同的频率,也可以进入不同的休眠模式。在 PM 组件的底层实现里,是将这些模式做了抽象处理,形成统一的模式命名。例如:高性能运行模式、低功耗运行模式、停止模式(仅仅 CPU 停止)、定时器模式(CPU 停止,进入深度休眠)等等。
问题:面对这么多模式,如果恰巧在产品上低功耗相关的外设也很多,怎么办?
传统方式 :就需要用户来处理好各个外设与电源模式切换的代码。因为可能有些外设不支持低功耗模式下运行,所以不能让系统空闲时就强制进入功耗模式,否则会导致一系列问题;
当前方式:当系统空闲时,PM 组件会结合当前用户配置的电源模式以及 MCU 工作情况,选择适合的模式进行切换,并且会在切换前通知相关外设,做好模式切换的准备工作。
通用性强
可支持所有通用的 MCU ,该组件也已经在 RT-Thread 内部经过长期测试,并在多个平台上做过验证,例如:STM32系列、EFM32系列 等等。
丰富的上层接口
PM 组件除了本身提供的功耗接口,还实现了一个 PM 设备,上层用户可以使用 RT-Thread 的设备接口进行访问。由于设备接口可以通过设备文件系统方式对接到文件系统,所以 PM 组件就可以使用通用的文件接口来访问。
同时 PM 组件还提供了 Finsh/MSH 调试命令,方便用户也可以通过输入命令方式,调试低功耗功能。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。