刚学习FreeRTOS做的一个小实验,有点问题不明白

刚学习FreeRTOS做的一个小实验,有点问题不明白

问题描述:


int main(void)
{
    /* Init board hardware. */
    BOARD_InitPins();
    BOARD_BootClockRUN();
    BOARD_InitMemory();
    BOARD_InitDebugConsole();

    /* Install IRQ Handler */
    SystemInitIrqTable();
   
    if(xTaskCreate(AppTaskCreate,"AppTaskCreate",configMINIMAL_STACK_SIZE + 10,NULL,1,AppTaskCreate_Handle) == pdPASS)
    {
      PRINTF("AppTaskCreate任务创建成功\n");
    }
    
    vTaskStartScheduler();
    for (;;)
        ;
}
static void AppTaskCreate(void)
{
  BaseType_t xReturn = pdPASS;
  
  taskENTER_CRITICAL();//进入临界区
  
  //创建LED任务
  xReturn = xTaskCreate(LED_Task,"LED_Task",configMINIMAL_STACK_SIZE + 10,NULL,2,LED_Task_Handle);
  if(pdPASS == xReturn)
      PRINTF("创建LED_Task任务成功!\r\n");
  
  
  //创建HelloWorld任务
  xReturn = xTaskCreate(HelloWorld_Task,"HelloWorld_Task",configMINIMAL_STACK_SIZE + 10,NULL,3,HelloWorld_Task_Handle);
  if(pdPASS == xReturn)
      PRINTF("创建HelloWorld_Task任务成功!\r\n");
  
  
  //创建AHT20_Task任务
  xReturn = xTaskCreate(AHT20_Task,"AHT20_Task",configMINIMAL_STACK_SIZE + 10,NULL,3,AHT20_Task_Handle);
  if(pdPASS == xReturn)
      PRINTF("创建AHT20_Task任务成功!\r\n");
  
  
  vTaskDelete(AppTaskCreate_Handle);//删除创建任务
  
  taskEXIT_CRITICAL();//退出临界区
}

static void LED_Task(void *pvParameters)
{ 
    for (;;)
    {
      PRINTF("LED_ON\r\n");
      vTaskDelay(500);
      
      PRINTF("LED_OFF\r\n");
      vTaskDelay(500);
      
    }
}

static void HelloWorld_Task(void *pvParameters)
{
    for (;;)
    {
        PRINTF("Hello world.\r\n");
        vTaskDelay(2000);

    }
}

static void AHT20_Task(void *pvParameters)
{ 
    for (;;)
    {
      PRINTF("没有传感器\r\n");
      vTaskDelay(5000);    
    }
}

上电运行的结果是这样的

img

程序先执行AppTaskCreate这个任务,但是其他三个任务都还没创建,为什么会输出箭头所指的内容呢,很不明白。

不奇怪,任务一创建就会执行。