1. 程式人生 > >技術分享:FreeRTOS實時內核使用指南

技術分享:FreeRTOS實時內核使用指南

ado 處理 搶占 systick 不同 ext 關於 器) 每次

技術分享:FreeRTOS實時內核使用指南

最近找這個資料的人比較多,好心的小編就來分享一些關於FreeRTOS的詳解和開發資料比較多,文件比較多,分享部分RTOS低功耗設計原理和實現的部分,有興趣的小夥伴可以到闖客網技術論壇下載,或者到群獲取:813238832
技術分享圖片

圖一
資料共享鏈接:https://bbs.usoftchina.com/thread-203500-1-1.html

RTOS 低功耗設計原理及實現

目前,越來越多的嵌入式產品在開發中使用 RTOS 作為軟件平臺,同時,開發中對低功耗的要求也越來越高,這篇文檔會討論一下如何在 RTOS 中處理微控制器的低功耗特性。應用中使用的 RTOS 一般采用基於時間片輪轉的搶占式任務調度機制。

一般的低功耗設計思路如下:

  1. 當 Idle 任務運行時,進入低功耗模式;
  2. 在適當的條件下,通過中斷或者外部事件喚醒 MCU。
    但是,從第二點可以看出,每次當 OS 系統定時器產生中斷時,也會將 MCU 從低功耗模式中喚醒,而頻繁的進入低功耗模式/從低功耗模式中喚醒會使得 MCU 無法進入深度睡眠,對低功耗設計而言也是不合理的。在 FreeRTOS 中給出了一種低功耗設計模式 ——Tickless Idle Mode,這個方法可以讓 MCU 更長時間的處於低功耗模式。

二.Tickless Idle Mode 的原理 及實現

  1. 情景分析
    技術分享圖片
    圖二

上圖是任務調度示意圖,橫軸是時間軸,T1,T2,T3,T4 是 RTOS 的時間片基準,有四個任務分別

是 TaskA,B,C,D,
Task A: 周期性任務
Task B: 周期性任務
Task C: 突發性任務
Task D: 周期性任務
從圖中可以看出在四個任務進行調度之間,會有四次空閑期間(此時 RTOS 會調度 Idle 任務運行,軟件設計的目標應該是盡可能使 MCU 在 Idle 任務運行時處於低功耗模式)。

Idle1: Idle 任務運行期間,會產生一次系統時鐘滴答,此時會喚醒 MCU,喚醒後 MCU 又會進入低功耗模式,這次喚醒是無意義的。期望使 MCU 在 Idle1 期間一直處於低功耗模式,因此適當調整系統定時器中斷使得 T1 時不觸發系統時鐘中斷,中斷觸發點設置為 Task B 到來時;

Idle2:Task C 在系統滴答到達前喚醒 MCU(外部事件),MCU 可以在 Idle2 中可以一直處於低功耗模式;

Idle3: 與 Idle2 情況相同,但 Idle3 時間很短,如果這個時間很短,那麽進入低功耗模式的意義並不大,
因此在進入低功耗模式時軟件應該添加策略;
Idle4: 與 Idle1 情況相同。

寫在最後的話
STM32 家族中擁有不同的系列,特別是專為低功耗應用設計的 L 系列,為其設計 RTOS 低功耗特性實現時可以有更多的實現方式(例,某種模式下內核停止運行,此時可以使用外部定時器或者 RTC 來代替 Systick 作為系統定時器)。

技術分享:FreeRTOS實時內核使用指南