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