您好,登錄后才能下訂單哦!
任務的創建
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 頭文件里面去,
開始任務:創建其他應用任務和信號量、隊列等內核對象
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。