【FreeRTOS学习笔记】任务创建和删除

    科技2024-01-17  96

    目录

    xTaskCreate函数xTaskCreateStatic函数xTaskCreateRestricted函数参考资料


    xTaskCreate函数


    BaseType_t xTaskCreate( TaskFunction_t pvTaskCode, const char * const pcName, configSTACK_DEPTH_TYPE usStackDepth, void *pvParameters, UBaseType_t uxPriority, TaskHandle_t *pvCreatedTask );

    创建一个新任务,并将其添加到准备运行的任务列表中。

    在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 ); } }

    xTaskCreateStatic函数


    TaskHandle_t xTaskCreateStatic( TaskFunction_t pxTaskCode, const char * const pcName, /*lint !e971 Unqualified char types are allowed for strings and single characters only. */ const uint32_t ulStackDepth, void * const pvParameters, UBaseType_t uxPriority, StackType_t * const puxStackBuffer, StaticTask_t * const pxTaskBuffer );

    TBD.


    xTaskCreateRestricted函数


    BaseType_t xTaskCreateRestricted( const TaskParameters_t * const pxTaskDefinition, TaskHandle_t *pxCreatedTask );

    TBD.


    参考资料


    【1】NXP官方IDE例程说明 【2】正点原子 STM32F429 FreeRTOS开发手册 【3】正点原子B站视频正点原子FreeRTOS手把手教学-基于STM32

    Processed: 0.026, SQL: 8