创建一个新任务,并将其添加到准备运行的任务列表中。
在FreeRTOS实施内部,任务使用两个内存块。 第一个块用于保存任务的数据结构。 任务将第二个块用作其堆栈。 如果使用xTaskCreate()创建任务,则两个内存块将自动在xTaskCreate()函数内部动态分配。(请参阅http://www.freertos.org/a00111.html)。 如果使用xTaskCreateStatic()创建任务,则应用程序编写器必须提供所需的内存。 因此,xTaskCreateStatic()允许在不使用任何动态内存分配的情况下创建任务。
有关不使用任何动态内存分配的版本,请参见xTaskCreateStatic()。
xTaskCreate()仅可用于创建对整个微控制器内存映射无限制访问的任务。包含MPU支持的系统也可以使用xTaskCreateRestricted()创建受MPU约束的任务。
pvTaskCode: pvTaskCode指向任务输入功能的指针。 任务必须实现为永不返回(即连续循环)。
pcName: pcName任务的描述性名称。 这主要是为了方便调试。 configMAX_TASK_NAME_LEN定义的最大长度-默认为16。
usStackDepth: usStackDepth指定为任务堆栈可以容纳的变量数量的任务堆栈的大小-而不是字节数。例如,如果堆栈为16位宽且usStackDepth定义为100,则将为堆栈存储分配200个字节。
pvParameters: pvParameters指针,将用作创建任务的参数。
uxPriority: uxPriority任务应运行的优先级。包含MPU支持的系统可以选择通过设置优先级参数的portPRIVILEGE_BIT位在特权(系统)模式下创建任务。例如,要创建优先级为2的特权任务,应将uxPriority参数设置为(2 | portPRIVILEGE_BIT)。
pvCreatedTask: pvCreatedTask用于回传可用来引用创建的任务的句柄。
如果成功创建任务并将其添加到就绪列表,则为pdPASS,否则,在文件projdefs.h中定义的错误代码
void vTaskCode( void * pvParameters ) { for( ;; ) { // Task code goes here. } } void vOtherFunction( void ) { static uint8_t ucParameterToPass; TaskHandle_t xHandle = NULL; //创建任务,存储句柄。 //请注意,传递的参数ucParameterToPass在任务的生存期内必须存在,因此在这种情况下被声明为静态。 //如果它只是一个自动堆栈变量,则在新任务尝试访问它时,它可能不再存在或至少已损坏。 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, &ucParameterToPass, tskIDLE_PRIORITY, &xHandle ); configASSERT( xHandle ); // Use the handle to delete the task. if( xHandle != NULL ) { vTaskDelete( xHandle ); } }TBD.
TBD.
【1】NXP官方IDE例程说明 【2】正点原子 STM32F429 FreeRTOS开发手册 【3】正点原子B站视频正点原子FreeRTOS手把手教学-基于STM32