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