你知道RTOS應(yīng)用中節(jié)省功耗的方法嗎?
你知道在空閑任務(wù)中使用一行代碼可以節(jié)省多少能量嗎?FreeRTOS商業(yè)版本OpenRTOS及安全版本SAFERTOS的提供商WHIS創(chuàng)建了一個基本應(yīng)用程序,在RTOS的idle hook中添加了一條WFI指令,通過測量系統(tǒng)節(jié)省了超過37%的能耗。如果此RTOS解決方案部署在100萬個處理器上,則節(jié)省的電量將相當(dāng)于為165個英國家庭在同一時期供電所需的電量。
通過添加一行代碼實(shí)現(xiàn)節(jié)能、環(huán)保的RTOS應(yīng)用設(shè)計(jì)
在Cortex-M架構(gòu)處理器中使用 RTOS 時,WHIS通過在空閑任務(wù)中使用等待中斷 (WFI) 指令,使處理器能耗節(jié)約三分之一以上。
在 ARM Cortex-M 平臺上的低功耗實(shí)現(xiàn)非常簡單:
當(dāng)使用基于優(yōu)先級的搶先式RTOS時,只要沒有用戶任務(wù)需要調(diào)度,默認(rèn)情況下RTOS會運(yùn)行最低優(yōu)先級的任務(wù),通常是空閑任務(wù)。空閑任務(wù)執(zhí)行一個無限循環(huán),每次循環(huán)調(diào)用“空閑鉤子函數(shù)”。為了節(jié)省空閑任務(wù)的功耗,空閑鉤子函數(shù)需要配置處理器工作在低功耗模式。
一個簡單有效的低功耗實(shí)現(xiàn)方法是在空閑鉤子函數(shù)中添加一條WFI指令,將處理器設(shè)置為低功耗模式,可以被中斷喚醒。
void vApplicationIdleHook( void )
{
asm volatile ("WFI \n" );
}
如果系統(tǒng)在執(zhí)行空閑任務(wù),則非空閑任務(wù)被調(diào)度執(zhí)行的唯一可能方式是響應(yīng)中斷,通常是系統(tǒng)節(jié)拍。當(dāng)中斷發(fā)生時,處理器恢復(fù)到正常模式并繼續(xù)執(zhí)行。
結(jié)果驗(yàn)證
WHIS基于從 FreeRTOS 升級到 SAFERTOS workshop Demo(請點(diǎn)擊“閱讀原文”),彩色LED循環(huán)應(yīng)用程序來實(shí)現(xiàn)了驗(yàn)證工作。應(yīng)用包含多個任務(wù),但任務(wù)大部分時間處于阻塞狀態(tài),因此處理器的每個節(jié)拍時間中大部分運(yùn)行在空閑任務(wù)中。在應(yīng)用中創(chuàng)建了一個空閑鉤子函數(shù),其包含一條WFI指令。為了量化可以節(jié)省的功耗,我們使用WFI運(yùn)行應(yīng)用,然后將其與注釋掉WFI指令的應(yīng)用程序進(jìn)行比較。
測量結(jié)果如下:
單個處理器節(jié)省的絕對功率非常小,但是考慮到全球每年部署的大量處理器,可以節(jié)省的功率確實(shí)可以擴(kuò)展。大量嵌入式設(shè)計(jì)中已采取許多硬件/軟件措施降低系統(tǒng)功耗,但對于普通的設(shè)計(jì),強(qiáng)烈建議設(shè)計(jì)人員考慮在空閑鉤子函數(shù)中添加WFI指令。僅需一行代碼,如果所有設(shè)計(jì)都針對功耗進(jìn)行了優(yōu)化,節(jié)省的能量將是相當(dāng)可觀的。歡迎關(guān)注微信公眾號【麥克泰技術(shù)】
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。
攝像頭相關(guān)文章:攝像頭原理