RT-Thread正式開源了電源管理框架

2021-01-08 電子發燒友
RT-Thread正式開源了電源管理框架

李倩 發表於 2018-11-02 15:45:00

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 組件會自動在後臺工作;否則需要對這些功耗敏感外設做特殊處理。

打開APP閱讀更多精彩內容

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴

相關焦點

  • 《rt-thread驅動框架分析》-i2c驅動
    驅動分析I2C設備驅動框架圖:我們先RT-Thread的I2C框架圖(這是我自己理解的框架圖,如果不對的地方,請指出):如果你分析過Linux的I2C框架,它的層次也是這樣子。所以你了解了RTT的I2C之後再去看Linux的I2C框架,其實問題不大。驅動層:分為硬體I2C驅動和軟體I2C驅動。核心層: ①其中bit_ops是RTT為軟體I2C提供的中間層,它的作用:為底層模擬I2C驅動提供回調接口,為核心層提供統一I2C通信接口。
  • 國產開源物聯網作業系統RT-Thread Smart正式上線(附原始碼下載地址)
    353EETC-電子工程專輯而如今,官方消息透露,RT-Thread Smart 已正式上線,目前原始碼可在Github、Gitee下載,採用Apache License 2.0。353EETC-電子工程專輯目前,rt-smart已支持QEMU、樹莓派4B運行,開發者即可通過rt-smart開源倉庫獲得相關代碼和文檔,參考學習、了解RT-Smart的架構和代碼。同時,rt-smart還在持續演進中,歡迎開發者參與其中,共同打造創新平臺,構建支持多處理器、開放的作業系統,推動行業生態發展。
  • RT-Thread Nano 3.1.3 正式發布
    從上圖中可以看出RT-Thread Nano的架構: 極簡版硬實時內核(可裁剪):內核包含線程管理、時鐘管理、中斷管理、內存管理、線程間同步與通信等功能,滿足輕量級作業系統的基本要求。從官網下載的 rtthread-nano 3.1.3 源碼壓縮包的目錄結構如下所示,基本與完整版的目錄保持一致: 文件夾名稱 說明 bsp 示例代碼 components/finsh FinSH 組件源碼,僅在移植FinSH時使用 docs 說明文檔 include 頭文件目錄 libcpu
  • RISC-V單片機快速入門02-移植RT_Thread Nano
    前言:上一節,我們使用芯來科技Nuclei Studio IDE搭建了裸機開發環境,本節我們開始正式移植RT_Thread系統。經過11年的累積發展,RT-Thread已經擁有一個國內最大的嵌入式開源社區,同時被廣泛應用於能源、車載、醫療、消費電子等多個行業,累積裝機量超過2億臺,成為國人自主開發、國內最成熟穩定和裝機量最大的開源RTOS。
  • 【RT-Thread】線程的基本知識
    線程控制塊在 RT-Thread 中,線程控制塊由結構體 struct rt_thread 表示,線程控制塊是作業系統用於管理線程的一個數據結構,它會存放線程的一些信息,例如優先級、線程名稱、線程狀態等,也包含線程與線程之間連接用的鍊表結構
  • RT Thread v2.1.0 正式版發布
    RT-Thread 2.1.0  正式版發布了!
  • RT-Thread V4.0.2 正式發布,優化 BSP、多核等方面體驗
    我們在經過總計851次的提交,7421個文件的修改,之後才正式發布,所以整理change log也相應地花了更多的時間。通過上面的更改總結可以發現,作為RT-Thread平臺層面的代碼(即每次RT-Thread開源發布的版本),基本上會維持現有的狀態,不會大幅度添加新的功能,我們也期待未來能夠做得更精簡,更高效。就算有新的代碼,也主要是出現在對晶片的支持上。相信這個是大家希望看到的,沒有具體的晶片平臺支撐,只是OS有什麼用呢?
  • RT-Thread Studio V1.1 新版本發布
    RT-Thread Studio V1.1.0 在5月29號正式發布了。本次V1.1.0不提供升級包,需從官網下載V1.1.0完整版安裝程序。  【官網下載地址】https://www.rt-thread.org/page/studio.html(或點擊文末閱讀原文下載)
  • 玩轉RT-Thread之荔枝派Nano(全志F1C100S)一、新手上路
    更詳細信息及開發文檔可在官網https://www.rt-thread.org獲取。RT-Thread代碼開源在github及國內的碼雲,2個倉庫同步更新。2018年3月底最新版本為3.0.3。github倉庫地址:https://github.com/RT-Thread,碼雲倉庫地址:https://gitee.com/rtthread。
  • RT-Thread x STM32 全連接創意創客大賽已開始報名
    大賽要求● 代碼和文檔均開源(建議代碼託管在Gitee)● 開發者基於RT-Thread開發物聯網創新型應用或者終端產品● 基於主辦方提供的硬體ART-Pi STM32H750或者自備STM32硬體RT-Thread版本使用說明可以使用:
  • 開發,從未如此簡單——RT-Thread 4.0版本IoT OS
    RT-Thread 的AI軟體框架在已有的音頻播放等框架基礎上,加入面向IoT的神經網絡庫、語音喚醒和打斷算法,形成全新的智能型人機互動基礎平臺。RT-Thread Smart(以下簡稱為rt-smart) 是基於RT-Thread作業系統衍生的新分支——混合微內核作業系統,主要面向帶 MMU(內存管理單元Memory Management Unit)的中高端處理器,為眾多領域提供更具競爭力的作業系統基礎軟體平臺,具備快速啟動、兼容POSIX 接口、開發調試便利、應用與內核分離、高安全性等特性。
  • rt-thread內核對象標誌(object.flag)總結
    1 前言 在前面介紹rt-thread內核對象時(http://blog.csdn.net/flydream0?viewmode=contents),有介紹到rt-thread內核對象成員flag,但是沒有怎麼具體介紹他的含意,只是把它當做普通標誌來理解,這裡特意將此flag提出來總結一下,這也是這篇博文的目的. 首先,內核對象的flag確實是一標誌,且是8個位的數據,按位來定義的,那麼它到底各個位是怎麼定義的呢?答案是用在不同的內核對象時,它的各位定義會有所不同.
  • 在rt-thread下實現OTA在線固件更新功能
    開發者通過該 Bootloader 即可直接使用 RT-Thread OTA 功能,輕鬆實現對設備端固件的管理、升級與維護。Bootloader 在線獲取地址: http://iot.rt-thread.com登陸帳號
  • 物聯網開發,一定要知道這6個開源平臺
    今天給大家介紹5個關於物聯網開發的開源項目,希望能為你的物聯網開發工作提供更好的支持。1、物聯網開源框架 Apphttps://gitee.com/dantang/GizOpenSource_AppKit_Android機智雲開源框架(GizOpenSource_AppKit_Android),可以支持設備到設備的互聯,適用於物聯網的軟體框架。
  • 物聯網開發,一定要知道這6個開源平臺
    今天給大家介紹5個關於物聯網開發的開源項目,希望能為你的物聯網開發工作提供更好的支持。1、物聯網開源框架 Apphttps://gitee.com/dantang/GizOpenSource_AppKit_Android機智雲開源框架(GizOpenSource_AppKit_Android),可以支持設備到設備的互聯,適用於物聯網的軟體框架。
  • 真國產混合微內核作業系統RT-Thread Smart開源
    RT-Thread官方消息,RT-Thread Smart已正式上線,目前原始碼可在Github、Gitee下載,採用Apache License 2.0。RT-Thread SmartRT-Thread Smart(以下簡稱為rt-smart
  • RT-Thread教程一之Linux下開發環境及QEMU配置
    RT-Thread原始碼Linux下安裝git後在工程目錄下(比~/Workplace)執行git clone https://github.com/RT-Thread/rt-thread我們看一下樹目錄結構rt-thread git:(master) tree . -L 1.
  • 一文詳解RT-Thread自動初始化
    官網文檔提及到了, (他們的文檔在這裡:https://www.rt-thread.org/document/site/programming-manual/basic/basic/#rt-thread_3),但是寫的只是概念層面上的,看完後會使用但原理還是不太清楚。之前研究過,今天把它總結下,寫出來分享。
  • 又一國產開源微內核作業系統上線!原始碼已開放下載
    官方消息,RT-Thread Smart已正式上線,目前原始碼可在Github、Gitee下載,採用Apache License 2.0。/tree/rt-smart https://gitee.com/rtthread/rt-thread/tree/rt-smart RT-Thread
  • rt-smart中的imx6ull用戶態點燈
    rt-smart中的imx6ull用戶態點燈 RTThread物聯網操作 發表於 2021-01-15 13:41:06 rt-thread的rt-smart已經發布有段時間了,其實我之前也寫過幾篇關於rt-smart