1. 程式人生 > >學習筆記-RTOS任務創建

學習筆記-RTOS任務創建

學習筆記 rtos 任務創建

任務的創建

1 任務需要 RAM 來保存與任務有關的狀態信息(任務控制塊)

2 需要一定的 RAM 來作為任務堆棧


xTaskCreate()就會從FreeRTOS的堆中分配,必須提供內存管理文件

默認使用heap_4.c


3 宏 configSUPPORT_DYNAMIC_ALLOCATION 必須為 1


4 函數 xTaskCreateStatic()創建的話這些 RAM 就需要用戶來提供了

configSUPPORT_STATIC_ALLOCATION設置為1


5 任務調度器啟動前還是啟動後,都可以創建任務

最常用的一個

BaseType_t xTaskCreate( TaskFunction_t pxTaskCode,

const char * const pcName,

const uint16_t usStackDepth,

void * const pvParameters,

UBaseType_t uxPriority,

TaskHandle_t * const pxCreatedTask )

pxCreatedTask 任務句柄,就是任務的任務堆棧,其他API可能會用到


返回值 是反映任務創建成功或出錯碼

pdPASS: 任務創建成功。


6 不常用

TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode,

const char * const pcName,

const uint32_t ulStackDepth,

void * const pvParameters,

UBaseType_t uxPriority,

StackType_t * const puxStackBuffer,

StaticTask_t * const pxTaskBuffer )

pxTaskBuffer: 任務控制塊。

返回值:NULL : 任務創建失敗

其他值: 任務創建成功,返回任務的任務句柄。


7 vTaskDelete( TaskHandle_t xTaskToDelete )

xTaskToDelete: 要刪除的任務的任務句柄。

可以使用NULL做參數,刪除任務本身


8 關鍵實驗(學習動態創建):

任務創建:

#define START_TASK_PRIO 1 //任務優先級

#define START_STK_SIZE 128 //任務堆棧大小

TaskHandle_t StartTask_Handler; //任務句柄

void start_task(void *pvParameters); //任務函數


xTaskCreate((TaskFunction_t )start_task, //任務函數

(const char* )"start_task", //任務名稱

(uint16_t )START_STK_SIZE, //任務堆棧大小

(void* )NULL, //傳遞給任務函數的參數

(UBaseType_t )START_TASK_PRIO, //任務優先級

(TaskHandle_t* )&StartTask_Handler); //任務句柄


vTaskStartScheduler(); //開啟任務調度


開始任務:

taskENTER_CRITICAL(); //進入臨界區

//創建 TASK1 任務

。。。。。。

//創建 TASK2 任務

vTaskDelete(StartTask_Handler); //刪除開始任務

taskEXIT_CRITICAL(); //退出臨界區


任務堆棧、任務句柄、任務函數聲明等,這樣方便修改。這些東

西可以放到一個.h 頭文件裏面去,


開始任務:創建其他應用任務和信號量、隊列等內核對象




























學習筆記-RTOS任務創建