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也會用到
     返回值:
  • errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY:失敗,內存不夠
  • pdPASS:成功



2.vTaskDelete()
--刪除任務函數,被刪除的任務將不存在也不再運行。
任務被刪除後,句柄將無法續使用,若使用xTaskCreate()創立則刪除後會釋放掉內存,申請的記憶體會在空閒任務中釋放,所以刪掉任務需要一點時間給空閒任務。



參數:

  • xTaskToDelete:要刪除的任務句柄
返回值:無



------------------------------------------------------------------------------

測試:
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();

}

兩個任務的優先權都設定一樣,實驗結果:



























留言

這個網誌中的熱門文章

FreeRTOS學習筆記 (三)-時間管理vTaskDelay()及vTaskDelayUntil()

MCU的硬體基礎知識(2) 電晶體的應用