AliOS Things電源管理框架使用介紹,主要針對物聯網設備低功耗需求。
一、電源管理框架簡介
電源管理框架的目的在于節約CPU的功耗。傳統上,當操作系統處于空閑狀態時,比如所有用戶任務和系統任務處于阻塞狀態,將執行idle task。idle task的通常做法是一個while(1)空循環,從匯編視角看是不斷執行跳轉指令,也就是說當操作系統空閑時,CPU將處于空轉狀態。使能電源管理框架后,當系統進入idle task后,將設置CPU進入低功耗狀態,從而節省CPU的功耗。
AliOS Things電源管理框架具有如下特點:
(1)應用配置電源管理框架并添加初始化代碼后,整個框架的運行對應用透明,用戶無需為了支持電源管理框架而修改應用代碼;
(2)支持多級低功耗狀態;
在某些MCU上,根據不同的節電程度和喚醒時間分為多級睡眠,電源管理框架提供了對該特性的支持,在進入低功耗狀態時將根據睡眠時間和節電程度選擇最佳睡眠等級。
(3)支持tickless機制
當MCU決定進入低功耗狀態時,將關閉系統tick中斷,并在醒來的時候恢復系統tick中斷并補償睡眠過程中丟失的tick數。這種策略通過減少系統時鐘中斷來最大程度降低系統空閑時的功耗。
(4)支持精簡的低功耗模式
當MCU進入低功耗后,不關閉系統tick中斷,系統tick也能喚醒系統。它的優點是實現簡單,但當系統長時間空閑時,由于系統時鐘頻繁喚醒系統,不利于節能。
在某基于nrf52832 MCU的開發板上測試電源管理框架的運行效果如下:
在普通運行模式下nrf52832 MCU的平均運行電流在4mA左右,在添加電源管理模塊后MCU的電流測試如下表所示:
從測試結果可以看出,在對功耗敏感的系統上,比如依靠電池供電的系統,非常有必要使用電源管理框架,它可顯著降低系統功耗,增加系統待機時間。
二、應用配置(為應用添加低功耗支持)
應用若要使用電源管理框架,需進行如下配置:
(1)應用目錄的.mk文件中添加對電源管理模塊的依賴,示例:
GLOBAL_DEFINES += RHINO_CONFIG_CPU_PWR_MGMT=1
$(NAME)_COMPONENTS := rhino/pwrmgmt
(2)在應用初始化函數中(比如application_start(int argc, char *argv[]))調用電源管理模塊初始化函數。
cpu_pwrmgmt_init();
三、示例應用(app/example/pwr_test)
目前AliOS Things 2.0版本在developerkit和PCA10040平臺上對電源管理框架進行了適配,可用如下命令編譯示例應用并下載到develoerkit上運行:
aos make pwr_test@developerkit
aos upload pwr_test@developerkit
示例應用創建了2個任務demo1和demo2。demo1的主要邏輯是一個while循環:count1增1,同時打印count1和g_idle_count[0]的值,然后睡眠1秒。demo2的主要邏輯也是一個while循環:count2增1,同時打印count2的值,然后睡眠2秒。
其中g_idle_count[0]是一個全局變量,idle任務在執行時會累加該值。
若沒有開啟低功耗模塊,那么當demo1和demo2處于睡眠狀態時,idle任務持續執行,g_idle_count[0]不斷增加。輸出示例如下:
count1 = 0, idle = 0
count2 = 0
count1 = 1, idle = 2347298
count1 = 2, idle = 4693421
count2 = 1
count1 = 3, idle = 7036926
count1 = 4, idle = 9383049
count2 = 2
count1 = 5, idle = 11726554
count1 = 6, idle = 14072465
開啟低功耗時,當demo1和demo2處于睡眠狀態時,idle任務執行g_idle_count[0]增1后,調用cpu_pwr_down()進入低功耗狀態。因此系統每次進入空閑狀態,g_idle_count[0]只增加1。輸出示例如下:
count1 = 0, idle = 0
count2 = 0
count1 = 1, idle = 1
count2 = 1
count1 = 2, idle = 3
count1 = 3, idle = 4
count2 = 2
count1 = 4, idle = 6
count1 = 5, idle = 7
說明:如果條件允許,直接測試功耗,比如測試MCU的電流,效果更直觀。
四、電源管理框架的適配
由于電源管理框架的運行依賴于硬件能力,因此在適配時首先要分析目標硬件是否有能力支持,然后要基于硬件能力為電源管理框架提供相關驅動。
4.1 硬件要求
要想支持電源管理框架,目標MCU需要支持如下特性:
(1)至少支持一種低功耗模式。在該低功耗模式下,RAM和寄存器的值能夠被維持。
(2)在低功耗模式下,存在可用的定時器,且該定時器能喚醒系統。在tickless機制下,該定時器用于計算低功耗時間,以補償系統時鐘。
4.2 適配接口
為了支持電源管理模塊需完成如下接口適配:
注:可參考developerkit和PCA10040平臺上的適配示例(pwrmgmt_hal目錄)。
作者:云棲社區 jianniu
-
電源管理
+關注
關注
115文章
6159瀏覽量
144257 -
物聯網
+關注
關注
2904文章
44306瀏覽量
371459
發布評論請先 登錄
相關推薦
評論