天天看點

FreeRTOS基礎知識

FreeRTOS任務特性:

  • 簡單;
  • 沒有使用限制;
  • 支援搶占;
  • 支援優先級;
  • 每個任務都有堆棧,但也導緻了RAM使用量增大;
  • 如果使用強化在哪的話必須仔細考慮重入的問題;

    協程

  • FreeRTOS的協程已經不再更新維護,不用考慮了;

    FreeRTOS任務狀态

  • 運作态
  • 就緒态
  • 阻塞态
  • 挂起态
    FreeRTOS基礎知識
    任務優先級
  • 任務優先級決定了任務的執行優先級别,在FreeRTOS中任務優先級可選範圍為:
  • 0~configMAX_PRIORITIES-1 //這是個宏定義,這個宏表示最大優先級
  • 數字越大,優先級越高
    FreeRTOS基礎知識
  • 在“FreeRTOSConfig.h”檔案中,有這個宏,但是這個宏不是說最大優先級的數量有32,而是說最大優先級共有32級,真正的級數是0-31。
  • 同一優先級下可以有多個任務
  • 在建立任務時,需要指定這個任務的任務優先級。

任務實作

FreeRTOS基礎知識

任務實作如圖所示,使用者自己的代碼就寫在死循環中即可。

  • 需要注意的是,每個任務的死循環中需要一個可以引起任務排程的函數,就是那個第四步的函數:“vTaskDelay();”。

    一般任務建立後我們是不會退出的,但如果要退出,需要執行第5步中的函數:“vTaskDelete(NULL);”

    任務控制塊

    FreeRTOS基礎知識
  • 每個任務都會有一些屬性,我們需要對其進行一些描述,好讓系統知道關于這個任務的一些屬性,比如這個任務的任務名字、任務堆棧、優先級等等,是以就需要任務控制塊這個資料結構了。
  • 任務控制詳情在“tasks.c”裡面。

    任務堆棧

    FreeRTOS基礎知識
FreeRTOS基礎知識
  • 注意,任務堆棧大小共占多少位元組是:“128*4=512”位元組,不是128位元組,如上圖所示。
  • 任務堆棧的大小根據任務實際情況來調整。
  • 如果在調試國策懷念高中出現程式卡死,基本就是任務堆棧大小沒有設定好,比如你如果在一個任務中申請了一個數組,這就比較大了,此時就要根據實際情況把任務堆棧設定的大點。

繼續閱讀