0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread正式开源了电源管理框架

RTThread物联网操作系统 来源:未知 作者:李倩 2018-11-02 15:45 次阅读

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 调试命令,方便用户也可以通过输入命令方式,调试低功耗功能。

使用简介

PM 组件目前开源在 RT-Thread 的 GitHub 仓库中,代码位于 rt-thread/components/drivers/pm 下,大致使用流程如下:

开启:通过 ENV 工具,在 menuconfig 中的设备驱动菜单下选中 PM 组件;

移植:请先参考《电源管理用户手册》完成必要的移植过程;

应用:如果没有对接功耗敏感的外设,此时应用代码无需做任何更改,PM 组件会自动在后台工作;否则需要对这些功耗敏感外设做特殊处理。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电源管理
    +关注

    关注

    112

    文章

    6007

    浏览量

    141092
  • 物联网
    +关注

    关注

    2866

    文章

    41549

    浏览量

    358118
  • 低功耗
    +关注

    关注

    9

    文章

    2223

    浏览量

    102574

原文标题:RT-Thread 低功耗组件开源,开启IoT 产品智能省电模式

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于RT-Thread的RoboMaster电控框架设计

    由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包……很难不选择 RT-Thread 进行项目开发。
    发表于 09-06 15:21 398次阅读

    RT-Thread 架构图

    RT-Thread 架构图:RT-Thread开发指南开源地址内核层:RT-Thread 内核,是 RT-Thread 的核心部分,包括
    发表于 12-16 08:15

    RT-Thread编程指南

    RT-Thread编程指南——RT-Thread开发组(2015-03-31)。RT-Thread做为国内有较大影响力的开源实时操作系统,本文是RT
    发表于 11-26 16:06 0次下载

    RT-Thread开源作品秀】基于RT-Thread的星务平台研究

    本作品为了验证星务软件在RT-Thread系统运行的可行性,底层是否能够驱动星务软件,同时扩展RT-Thread应用范围。ART-Pi作为卫星下位机,...
    发表于 01-25 18:26 5次下载
    【<b class='flag-5'>RT-Thread</b><b class='flag-5'>开源</b>作品秀】基于<b class='flag-5'>RT-Thread</b>的星务平台研究

    RT-Thread全球技术大会:RT-Thread电源管理的意义

    RT-Thread全球技术大会:RT-Thread电源管理的意义是为了满足用户对性能需求,尽可能降低系统能耗以延长设备待机时间。           审核编辑:彭静
    的头像 发表于 05-27 15:01 880次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:<b class='flag-5'>RT-Thread</b><b class='flag-5'>电源</b><b class='flag-5'>管理</b>的意义

    RT-Thread全球技术大会:什么是电源管理组件?

    RT-Thread全球技术大会:什么是电源管理组件?           审核编辑:彭静  
    的头像 发表于 05-27 15:12 907次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:什么是<b class='flag-5'>电源</b><b class='flag-5'>管理</b>组件?

    RT-Thread全球技术大会:RT-Thread上的单元测试框架与运行测试用例

    RT-Thread全球技术大会:RT-Thread上的单元测试框架与运行测试用例                 审核编辑:彭静
    的头像 发表于 05-27 16:21 1255次阅读
    <b class='flag-5'>RT-Thread</b>全球技术大会:<b class='flag-5'>RT-Thread</b>上的单元测试<b class='flag-5'>框架</b>与运行测试用例

    RT-Thread文档_线程管理

    RT-Thread文档_线程管理
    发表于 02-22 18:28 0次下载
    <b class='flag-5'>RT-Thread</b>文档_线程<b class='flag-5'>管理</b>

    RT-Thread文档_时钟管理

    RT-Thread文档_时钟管理
    发表于 02-22 18:28 0次下载
    <b class='flag-5'>RT-Thread</b>文档_时钟<b class='flag-5'>管理</b>

    RT-Thread文档_内存管理

    RT-Thread文档_内存管理
    发表于 02-22 18:30 0次下载
    <b class='flag-5'>RT-Thread</b>文档_内存<b class='flag-5'>管理</b>

    RT-Thread文档_中断管理

    RT-Thread文档_中断管理
    发表于 02-22 18:30 1次下载
    <b class='flag-5'>RT-Thread</b>文档_中断<b class='flag-5'>管理</b>

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 7次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    RT-Thread文档_utest 测试框架

    RT-Thread文档_utest 测试框架
    发表于 02-22 18:43 2次下载
    <b class='flag-5'>RT-Thread</b>文档_utest 测试<b class='flag-5'>框架</b>

    基于 RT-Thread 的 RoboMaster 电控框架(一)

    由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包……很难不选择 RT-Thread 进行项目开发
    的头像 发表于 09-19 19:55 411次阅读

    基于rt-thread的socket通信设计

    最近再研究 rt-thread 的通信 ,想设计出 eps8266(多个) rt-thread(作为中控) 服务器的通信框架,使用的开发板是 潘多拉
    的头像 发表于 10-13 15:02 662次阅读
    基于<b class='flag-5'>rt-thread</b>的socket通信设计