FreeRTOSюки xTaskCreate ()

Анализ функций 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
                          );

резюме

Создайте новый экземпляр задачи.
Каждая задача требует ОЗУ для сохранения состояния задачи (блок управления задачами или TCB) и используется задачей в качестве своего стека. Если задача была создана с помощью xTaskCreate (), вам необходимо автоматически выделить ОЗУ из кучи FreeRTOS. Если вы используете xTaskCreateStatic () для создания задачи, средство записи приложения предоставляет ОЗУ, что приводит к двум дополнительным параметрам функции, но позволяет статическое распределение ОЗУ во время компиляции.
Вновь созданная задача изначально находится в состоянии готовности, но если задача с более высоким приоритетом не может быть запущена, она немедленно станет запущенной задачей.
Задача может быть создана до и после запуска планировщика.

параметры

параметры функция
pvTaskCode Целевая функция
PCNAME Название задачи
usStackDepth Размер стека задач
pvParameters Параметр задачи
uxPriority Приоритет задачи
pxCreatedTask Дескриптор задачи

Возвращаемое значение

Возвращаемое значение смысл
pdPass Указывает, что задача была успешно создана.
errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY Указывает, что задача не может быть создана, потому что FreeRTOS не имеет достаточно памяти в куче для выделения структуры данных и стека задачи. Если проект содержит heap_1.c, heap_2.c или heap_4.c, configTOTAL_HEAP_SIZE в FreeRTOSConfig определяет общий объем доступной кучи. Используйте функцию обратного вызова vApplicationMallocFailedHook () (или «ловушку»), чтобы перехватить ошибку при выделении памяти, и используйте функцию API xPortGetFreeHeapSize (), чтобы запросить оставшийся объем свободной памяти кучи. Если в проект включен файл heap_3.c, конфигурация компоновщика будет определять общий размер кучи.

Используйте подпрограммы

/* 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 );
    }
}

объяснение

В FreeRTOSConfig.h configSUPPORT_DYNAMIC_ALLOCATION должен быть установлен в 1 (поддержка приложения с динамической памятью) или просто не определен, чтобы сделать эту функцию доступной.

Freertos более захватывающим

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

рекомендация

отblog.csdn.net/qq_31339221/article/details/101351398
рекомендация