刚学习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);
}
}
上电运行的结果是这样的
程序先执行AppTaskCreate这个任务,但是其他三个任务都还没创建,为什么会输出箭头所指的内容呢,很不明白。
答
不奇怪,任务一创建就会执行。