這篇文章主要講解了“AliOS Things電源管理框架怎么使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“AliOS Things電源管理框架怎么使用”吧!
成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的通道網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(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的功耗。
cdn.com/96a5ec7cc6a37077316a02632ad479e7cf228220.png">
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的電流測試如下表所示:
測試項 | 平均電流 | 說明 |
低功耗狀態(tài) | 2.06uA | |
BLE廣播態(tài)功耗(開啟低功耗模塊,廣播intervel 100ms) | 120uA | 電壓3v,發(fā)送負(fù)載21字節(jié),TX功率0dBm。 |
BLE廣播態(tài)功耗(開啟低功耗模塊,廣播intervel 1000ms) | 14.7uA | 電壓3v,發(fā)送負(fù)載21字節(jié),TX功率0dBm。 |
BLE廣播態(tài)功耗(開啟低功耗模塊,廣播intervel 2000ms) | 8.1uA | 電壓3v,發(fā)送負(fù)載21字節(jié),TX功率0dBm。 |
從測試結(jié)果可以看出,在對功耗敏感的系統(tǒng)上,比如依靠電池供電的系統(tǒng),非常有必要使用電源管理框架,它可顯著降低系統(tǒng)功耗,增加系統(tǒ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();
目前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的電流,效果更直觀。
由于電源管理框架的運行依賴于硬件能力,因此在適配時首先要分析目標(biāo)硬件是否有能力支持,然后要基于硬件能力為電源管理框架提供相關(guān)驅(qū)動。
要想支持電源管理框架,目標(biāo)MCU需要支持如下特性:
(1)至少支持一種低功耗模式。在該低功耗模式下,RAM和寄存器的值能夠被維持。
(2)在低功耗模式下,存在可用的定時器,且該定時器能喚醒系統(tǒng)。在tickless機制下,該定時器用于計算低功耗時間,以補償系統(tǒng)時鐘。
為了支持電源管理模塊需完成如下接口適配:
適配接口 | 功能說明 |
board_cpu_pwr_init | 初始化CPU的電源管理能力,比如注冊CPU電源狀態(tài)設(shè)置函數(shù),注冊CPU電源管理能力,注冊喚醒延遲時間,注冊喚醒/計時定時器。 |
cpu_cstate_set_t | 設(shè)置CPU的低功耗狀態(tài) |
systick_suspend | 掛起系統(tǒng)時鐘,系統(tǒng)時鐘在低功耗狀態(tài)下停止運行 |
systick_resume | 恢復(fù)系統(tǒng)時鐘 |
one_shot_timer_t | 低功耗下運行的喚醒/計時定時器。在低功耗下的計時,用于退出低功耗狀態(tài)時補償系統(tǒng)時鐘。 |
在適配過程中用戶可以調(diào)用如下接口:
可用接口 | 功能概述 |
cpu_pwr_node_init_static | 初始化CPU節(jié)點 |
cpu_pwr_node_record | 注冊CPU節(jié)點 |
cpu_pwr_c_state_capability_set | 設(shè)置CPU支持的低功耗模式 |
cpu_pwr_c_state_latency_save | 設(shè)置某個指定低功耗狀態(tài)的喚醒延遲時間 |
tickless_one_shot_timer_save | 注冊支持tickless機制的定時器 |
cpu_pwr_c_method_set | 注冊CPU狀態(tài)設(shè)置函數(shù) |
感謝各位的閱讀,以上就是“AliOS Things電源管理框架怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對AliOS Things電源管理框架怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!