FreeRTOS任務特性:
- 簡單;
- 沒有使用限制;
- 支援搶占;
- 支援優先級;
- 每個任務都有堆棧,但也導緻了RAM使用量增大;
-
如果使用強化在哪的話必須仔細考慮重入的問題;
協程
-
FreeRTOS的協程已經不再更新維護,不用考慮了;
FreeRTOS任務狀态
- 運作态
- 就緒态
- 阻塞态
- 挂起态 任務優先級
FreeRTOS基礎知識 - 任務優先級決定了任務的執行優先級别,在FreeRTOS中任務優先級可選範圍為:
- 0~configMAX_PRIORITIES-1 //這是個宏定義,這個宏表示最大優先級
- 數字越大,優先級越高
FreeRTOS基礎知識 - 在“FreeRTOSConfig.h”檔案中,有這個宏,但是這個宏不是說最大優先級的數量有32,而是說最大優先級共有32級,真正的級數是0-31。
- 同一優先級下可以有多個任務
- 在建立任務時,需要指定這個任務的任務優先級。
任務實作
任務實作如圖所示,使用者自己的代碼就寫在死循環中即可。
-
需要注意的是,每個任務的死循環中需要一個可以引起任務排程的函數,就是那個第四步的函數:“vTaskDelay();”。
一般任務建立後我們是不會退出的,但如果要退出,需要執行第5步中的函數:“vTaskDelete(NULL);”
任務控制塊
FreeRTOS基礎知識 - 每個任務都會有一些屬性,我們需要對其進行一些描述,好讓系統知道關于這個任務的一些屬性,比如這個任務的任務名字、任務堆棧、優先級等等,是以就需要任務控制塊這個資料結構了。
-
任務控制詳情在“tasks.c”裡面。
任務堆棧
FreeRTOS基礎知識
- 注意,任務堆棧大小共占多少位元組是:“128*4=512”位元組,不是128位元組,如上圖所示。
- 任務堆棧的大小根據任務實際情況來調整。
- 如果在調試國策懷念高中出現程式卡死,基本就是任務堆棧大小沒有設定好,比如你如果在一個任務中申請了一個數組,這就比較大了,此時就要根據實際情況把任務堆棧設定的大點。