首页 > 试题广场 >

关于下面部分代码段的描(假设代码中所有使用到的变量,宏定义和

[单选题]
关于下面部分代码段的描(假设代码中所有使用到的变量,宏定义和函数均已定义),不正确的是( )
void task1(void *pvParameters)
{
    taskENTER_CRITICAL();
	
 
    xTaskCreate((TaskFunction_t )task2,     	
                (const char*    )"task2",   	
                (uint16_t       )TASK3_STK_SIZE, 
                (void*          )NULL,				
                (UBaseType_t    )TASK2_TASK_PRIO,	
                (TaskHandle_t*  )&Task2Task_Handler);   

    xTaskCreate((TaskFunction_t )task3,     
                (const char*    )"task3",   
                (uint16_t       )TASK3_STK_SIZE, 
                (void*          )NULL,
                (UBaseType_t    )TASK3_TASK_PRIO,
                (TaskHandle_t*  )&Task3Task_Handler);        

    vTaskDelete(Task1_Handler); 
				
    taskEXIT_CRITICAL(); 
}

int main(void)
{ 
    //省略准备工作代码
	
	//创建开始任务
    xTaskCreate((TaskFunction_t )task1,
                (const char*    )"task1",
                (uint16_t       )TASK1_STK_SIZE,
                (void*          )NULL, 
                (UBaseType_t    )TASK1_PRIO, 
                (TaskHandle_t*  )&Task1_Handler);
    vTaskStartScheduler(); 
}
  • 在函数task1中的函数vTaskDelete使用来删除任务的
  • 任务中可以调用xTaskCreate函数来创建任务
  • 函数task1调用函数taskENTER_CRITICAL()和taskEXIT_CRITICAL(),该调用是多余的
  • 除系统自动创建的任务外,题中代码中最后可以参与调度的任务个数是2
1、taskENTER_CRITICAL() 和 taskEXIT_CRITICAL() 是实时操作系统(RTOS,如FreeRTOS)中用于保护临界区的核心函数。
(1)taskENTER_CRITICAL()确保接下来的代码块在执行时,不会被其他任务或中断服务程序打断,从而独占某些共享资源(如全局变量、硬件寄存器、链表等)
(2)taskEXIT_CRITICAL() 在关键操作完成后,及时释放CPU控制权,让系统恢复正常的多任务和中断响应能力。它必须和taskENTER_CRITICAL()成对出现。

2、除了系统自动创建的空闲任务等,用户创建的任务只有task2和task3,共2个可以参与调度的任务。
发表于 2026-03-31 10:13:23 回复(0)