FreeRTOS學習筆記 (二)-任務創建和刪除(xTaskCreate及vTaskDelete)
函數
|
功能
|
xTaskCreate()
|
動態創建一個任務
|
xTaskCreateStatic()
|
靜態創建一個任務
|
xTaskCreateRestricted()
|
創建使用MPU進行限制任務
|
vTaskDelay()
|
任務刪除
|
1.xTaskCreate()
--創建一個任務,RAM默認使用heap_4.c(後面章節補充)管理內存。新創建的任務默認是就緒狀態,如果當前無更高優先權的任務運行,此任務將立刻執行:
- pvTaskCode:任務函數(函數名稱)
- pcName:任務名子,名稱不能超過configMAX_TASK_NAME_LEN,會自動刪除超過字串
- usStackDepth:任務的棧大小
- pvParameters:傳遞給任務的參數
- uxPriority:任務的優先權,0~configMAX_PRIORITIES-1
- pvCreatedTask:任務句柄。任務創建成功會返回此任務句柄,其他API也會用到
返回值:
2.vTaskDelete()
- errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:失敗,內存不夠
- pdPASS:成功
--刪除任務函數,被刪除的任務將不存在也不再運行。
任務被刪除後,句柄將無法繼續使用,若使用xTaskCreate()創立則刪除後會釋放掉內存,申請的記憶體會在空閒任務中釋放,所以刪掉任務需要一點時間給空閒任務。
參數:
- xTaskToDelete:要刪除的任務句柄
返回值:無
------------------------------------------------------------------------------
測試:
1.啟動兩個Task
}
------------------------------------------------------------------------------
測試:
1.啟動兩個Task
void vTaskFunction1( void * pvParameters )
{
while(1)
{
taskENTER_CRITICAL();
printf("===in task1===\n");
taskEXIT_CRITICAL();
vTaskDelay(200);
}
// vTaskDelete(NULL);
}
void vTaskFunction2( void * pvParameters )
{
while(1)
{
taskENTER_CRITICAL();
printf("~~~in task2~~~\n");
taskEXIT_CRITICAL();
vTaskDelay(200);
}
// vTaskDelete(NULL);
}
void main(void)
{
xTaskCreate(vTaskFunction1,"task1",1024,NULL,1,NULL);
xTaskCreate(vTaskFunction2,"task2",1024,NULL,1,NULL);
vTaskStartScheduler();
}
兩個任務的優先權都設定一樣,實驗結果:
留言
張貼留言