FreeRTOSyuki xTaskCreate ()

Análisis de la función xTaskCreate ()

task. h

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

Resumen

Crea una nueva instancia de tarea.
Cada tarea requiere RAM para guardar el estado de la tarea (bloque de control de tarea o TCB), y la tarea la utiliza como su pila. Si la tarea se creó usando xTaskCreate (), debe asignar RAM automáticamente desde el montón de FreeRTOS. Si usa xTaskCreateStatic () para crear una tarea, el escritor de la aplicación proporciona RAM, que da como resultado dos parámetros de función adicionales, pero permite la asignación de RAM estática en el momento de la compilación.
La tarea recién creada está inicialmente lista, pero si no se puede ejecutar una tarea de mayor prioridad, se convertirá inmediatamente en una tarea en ejecución.
La tarea se puede crear antes y después de iniciar el planificador.

Parámetro

Parámetro Función
pvTaskCode Función de la tarea
pcName Nombre de la tarea
usStackDepth Tamaño de pila de tareas
pvParameters Parámetro de la tarea
uxPriority Prioridad de la tarea
pxCreatedTask Manejador de tareas

Valor de retorno

Valor de retorno Significado
pdPass Indica que la tarea se ha creado correctamente.
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY Indica que la tarea no se puede crear porque FreeRTOS no tiene suficiente memoria de almacenamiento dinámico para asignar la estructura de datos de la tarea y la pila. Si el proyecto contiene heap_1.c, heap_2.c o heap_4.c, configTOTAL_HEAP_SIZE en FreeRTOSConfig define la cantidad total de almacenamiento dinámico disponible. Use la función de devolución de llamada (o "gancho") vApplicationMallocFailedHook () para detectar la falla al asignar memoria, y use la función API xPortGetFreeHeapSize () para consultar la cantidad restante de memoria libre. Si heap_3.c se incluye en el proyecto, la configuración del vinculador definirá el tamaño total del montón.

Usa rutinas

/* Task to be created. */
void vTaskCode( void * pvParameters )
{
    /* The parameter value is expected to be 1 as 1 is passed in the
    pvParameters value in the call to xTaskCreate() below. configASSERT( ( ( uint32_t ) pvParameters ) == 1 );

    for( ;; )
    {
        /* Task code goes here. */
    }
}

/* Function that creates a task. */
void vOtherFunction( void )
{
BaseType_t xReturned;
TaskHandle_t xHandle = NULL;

    /* Create the task, storing the handle. */
    xReturned = xTaskCreate(
                    vTaskCode,       /* Function that implements the task. */
                    "NAME",          /* Text name for the task. */
                    STACK_SIZE,      /* Stack size in words, not bytes. */
                    ( void * ) 1,    /* Parameter passed into the task. */
                    tskIDLE_PRIORITY,/* Priority at which the task is created. */
                    &xHandle );      /* Used to pass out the created task's handle. */

    if( xReturned == pdPASS )
    {
        /* The task was created.  Use the task's handle to delete the task. */vTaskDelete( xHandle );
    }
}

Explicación

En FreeRTOSConfig.h, configSUPPORT_DYNAMIC_ALLOCATION debe establecerse en 1 (admite la aplicación de memoria dinámica), o simplemente no está definido para que esta función esté disponible.

Freertos más emocionantes

发布了163 篇原创文章 · 获赞 183 · 访问量 12万+

Supongo que te gusta

Origin blog.csdn.net/qq_31339221/article/details/101351398
Recomendado
Clasificación