FreeRTOS任務

系統運行時,全局變量放在哪裏?子函數調用時,局部變量放在哪裏?中斷髮生時函數的返回地址放在哪裏???

棧是單片機RAM中一段連續的內存空間  棧的大小一般在啓動文件或者連接腳本中指定,最後由C庫函數 __main進行初始化

在多任務中每個任務都是獨立的互不干擾的,所以每個任務都分配獨立的棧空間,這個棧空間通常是

一個預先定義好的全局數組,也可以是動態分配的一段內存空間   ,都存在與RAM .

vTaskStartScheduler創建空閒任務

空閒任務是系統在啓動任務調度器時創建的優先級最低的任務  空閒任務的主題主要是做一些系統內存的清理  在實際應用中可以讓空閒任務讓單片機進入休眠或者低功耗操作

空閒任務的堆棧是一個定義好的數組  大小由FreeRTOSConfig.h中定義的宏connfigMINIMAL_STACK_SIZE控制

空閒任務的任務控制塊,是一個全局變量

任務棧其實就是一個預先定義好的全局數據,數據類型wei StackType_t ,大小由TASK1_STACK_SIZE這個

宏來定義,默認爲128,單位爲字即512個字節        ·

任務是一個獨立的函數,函數主題無限循環且不能返回

在裸機系統中,程序的主題是CPU按照順序執行的,在多任務系統中任務的執行是靠系統調度的

系統爲了順利調度任務,爲每個任務都額外定義了一個任務控制塊,任務控制塊相當於任務的身份證

裏面存儲任務的所有信息,任務的棧指針  任務的名稱,任務形參,系統對任務的全部操作 都可以通過這個任務控制塊來實現


typedef struct tskTaskControlBlock
{

}tskTCB
typedef tskTCB TCB_t;

xTaskCreateStatic()

任務的創建分爲兩種,一種是動態創建一種是靜態創建。動態創建時,任務控制塊和內存是創建任務時動態分配的,任務刪除時

內存釋放,靜態創建時,任務控制塊的棧和內存需要事先定義好,是靜態的內存,任務刪除時內存不能釋放

configSUPPORT_STATIC_ALLOCATION在FreeRTOSConfig.h中定義

任務句柄用來指向任務的TCB任務句柄的數據類型爲TaskHandle_t

就緒列表

任務創建好之後,我們需要把任務添加到就緒列表中,表示任務已經就緒,系統隨時都可以調度。

就緒列表實際上就是一個LIST_t類型的數組,數組的大小由決定最大任務優先級的宏定義configMAX_PRIORITES確定,configMAX_PRIORITES在FreeRTOSConfig.h中默認爲5最大支持256個優先級,數組的下標對應任務的優先級,同一優先級的任務統一插入到就緒列表的同意鏈表中

將任務插入到就緒列表中就是通過將任務控制塊的xStatieListItem節點插入到就緒列表中來實現·

任務調度器是操作系統的核心,其主要任務是實現任務的切換,技術從就緒列表中找到優先級最高的任務,然後執行該任務

vTaskStartScheduler

 

調度器啓動函數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章