1、如何降低功耗?
一般的簡單應(yīng)用中處理器大量的時間都在處理空閑任務(wù),所以我們就可以考慮當(dāng)處理器處理空閑任務(wù)的時候就進入低功耗模式,當(dāng)需要處理應(yīng)用層代碼的時候就將處理器從低功耗模式喚醒。FreeRTOS 就是通過在處理器處理空閑任務(wù)的時候?qū)⑻幚砥髟O(shè)置為低功耗模式來降低能耗。一般會在空閑任務(wù)的鉤子函數(shù)中執(zhí)行低功耗相關(guān)處理,比如設(shè)置處理器進入低功耗模式、關(guān)閉其他外設(shè)時鐘、降低系統(tǒng)主頻等等。
我們知道 FreeRTOS 的系統(tǒng)時鐘是由滴答定時器中斷來提供的,系統(tǒng)時鐘頻率越高,那么滴答定時器中斷頻率也就越高。以前講過,中斷是可以將 STM32F103 從睡眠模式中喚醒,周期性的滴答定時器中斷就會導(dǎo)致 STM32F103 周期性的進入和退出睡眠模式。因此,如果滴答定時器中斷頻率太高的話會導(dǎo)致大量的能量和時間消耗在進出睡眠模式中,這樣導(dǎo)致的結(jié)果就是低功耗模式的作用被大大的削弱。
為此,F(xiàn)reeRTOS 特地提供了一個解決方法——Tickless 模式,當(dāng)處理器進入空閑任務(wù)周期以后就關(guān)閉系統(tǒng)節(jié)拍中斷(滴答定時器中斷),只有當(dāng)其他中斷發(fā)生或者其他任務(wù)需要處理的時候處理器才會被從低功耗模式中喚醒。為此我們將面臨兩個問題:
問題一:關(guān)閉系統(tǒng)節(jié)拍中斷會導(dǎo)致系統(tǒng)節(jié)拍計數(shù)器停止,系統(tǒng)時鐘就會停止。
FreeRTOS 的系統(tǒng)時鐘是依賴于系統(tǒng)節(jié)拍中斷(滴答定時器中斷)的,如果關(guān)閉了系統(tǒng)節(jié)拍中斷的話就會導(dǎo)致系統(tǒng)時鐘停止運行,這是絕對不允許的!該如何解決這個問題呢?我們可以記錄下系統(tǒng)節(jié)拍中斷的關(guān)閉時間,當(dāng)系統(tǒng)節(jié)拍中斷再次開啟運行的時候補上這段時間就行了。這時候我們就需要另外一個定時器來記錄這段該補上的時間,如果使用專用的低功耗處理器的話基本上都會有一個低功耗定時器,比如 STM32L4 系列(L 系列是 ST 的低功耗處理器)就有一個叫做 LPTIM(低功耗定時器)的定時器。STM32F103 沒有這種定時器那么就接著使用滴答定時器來完成這個功能,具體實現(xiàn)方法后面會講解。
問題二:如何保證下一個要運行的任務(wù)能被準(zhǔn)確的喚醒?
即使處理器進入了低功耗模式,但是我的中斷和應(yīng)用層任務(wù)也要保證及時的響應(yīng)和處理。中斷自然不用說,本身就可以將處理器從低功耗模式中喚醒。但是應(yīng)用層任務(wù)就不行了,它無法將處理器從低功耗模式喚醒,無法喚醒就無法運行!這個問題看來很棘手,既然應(yīng)用層任務(wù)無法將處理器從低功耗模式喚醒,那么我們就借助其他的力量來完成這個功能。如果處理器在進入低功耗模式之前能夠獲取到還有多長時間運行下一個任務(wù)那么問題就迎刃而解了,我們只需要開一個定時器,定時器的定時周期設(shè)置為這個時間值就行了,定時時間到了以后產(chǎn)生定時中斷,處理器不就從低功耗模式喚醒了。這里似乎又引出了一個新的問題,那就是如何知道還有多長時間執(zhí)行下一個任務(wù)?這個時間也就是低功耗模式的執(zhí)行時間,值得慶辛的是 FreeRTOS已經(jīng)幫我們完成了這個工作。
-
處理器
+關(guān)注
關(guān)注
68文章
19435瀏覽量
231306 -
嵌入式
+關(guān)注
關(guān)注
5095文章
19189瀏覽量
307954 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62414
發(fā)布評論請先 登錄
相關(guān)推薦
降低電路漏電功耗的低功耗設(shè)計方法
![<b class='flag-5'>降低</b>電路漏電<b class='flag-5'>功耗</b>的<b class='flag-5'>低功耗</b>設(shè)計方法](https://file.elecfans.com/web1/M00/C6/A6/o4YBAF9hxWaAayGdAATfsJgfjtw357.png)
cogobuy降低功耗的措施
第30章 FreeRTOS低功耗之睡眠模式
第31章 FreeRTOS低功耗之停機模式
第33章 FreeRTOS低功耗之tickless模式
RTOS低功耗設(shè)計原理及實現(xiàn)_TicklessMode(FreeRTOS的實現(xiàn))
如何降低ZC發(fā)現(xiàn)網(wǎng)絡(luò)的頻次以降低功耗?
AT32 FreeRTOS基礎(chǔ)例程(包含低功耗功能)
關(guān)于FreeRTOS低功耗的問題
STM32與FreeRTOS實現(xiàn)低功耗
![STM32與<b class='flag-5'>FreeRTOS</b>實現(xiàn)<b class='flag-5'>低功耗</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32L4 運行FreeRTOS之STOP2低功耗模式
![STM32L4 運行<b class='flag-5'>FreeRTOS</b>之STOP2<b class='flag-5'>低功耗</b>模式](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論