FreeRTOS 之 xTaskCreateStatic ()

Analyse de la fonction xTaskCreateStatic ()

task. h

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

Résumé

Créez une nouvelle instance de tâche.
Chaque tâche nécessite de la RAM pour enregistrer l'état de la tâche (bloc de contrôle de tâche ou TCB) et est utilisée par la tâche comme pile. Si la tâche a été créée à l'aide de xTaskCreate (), vous devez allouer automatiquement la RAM à partir du tas FreeRTOS. Si vous utilisez xTaskCreateStatic () pour créer une tâche, le rédacteur d'application fournit de la RAM, ce qui se traduit par deux paramètres de fonction supplémentaires, mais permet l'allocation de RAM statique au moment de la compilation.
La tâche nouvellement créée est initialement dans un état prêt, mais si aucune tâche de priorité supérieure ne peut s'exécuter, elle deviendra immédiatement une tâche en cours d'exécution.
La tâche peut être créée avant et après le démarrage du planificateur.

Paramètre

Paramètre Fonction
pvTaskCode La tâche est une simple fonction C qui ne sortira jamais, elle est donc généralement implémentée comme une boucle infinie. Le paramètre pvTaskCode n'est qu'un pointeur sur la fonction (en fait le nom de la fonction) qui implémente la tâche.
pcName Nom descriptif de la tâche. Ceci est principalement utilisé pour faciliter le débogage, mais peut également être utilisé pour appeler xTaskGetHandle () pour obtenir le descripteur de tâche. La constante définie par l'application configMAX_TASK_NAME_LEN définit la longueur maximale du nom en caractères, y compris le terminateur nul. La longueur de chaîne fournie dépasse cette valeur maximale provoquera la troncature automatique de la chaîne.
ulStackDepth Le paramètre puxStackBuffer est utilisé pour passer le tableau de variables StackType_t à xTaskCreateStatic (). ulStackDepth doit être défini sur le nombre d'index dans le tableau.
pvParameters La fonction de tâche accepte les paramètres de type "pointeur vers void" (void *). La valeur affectée à pvParameters sera la valeur transmise à la tâche. Ce paramètre a le type "pointeur à annuler" pour permettre aux paramètres de tâche de recevoir efficacement et indirectement tout type de paramètre par la contrainte. Par exemple, vous pouvez transmettre un type entier à une fonction de tâche en convertissant le type entier en un pointeur vide lors de la création de la tâche, puis en reconvertissant le paramètre de pointeur vide en entier dans la définition de la fonction de tâche elle-même.
uxPriority Définissez la priorité d'exécution des tâches. La priorité peut être attribuée de 0 (priorité la plus basse) à (configMAX_PRIORITIES-1) (priorité la plus élevée). configMAX_PRIORITIES est une constante définie par l'utilisateur. Si configUSE_PORT_OPTIMISED_TASK_SELECTION est défini sur 0, il n'y a pas de limite supérieure sur le nombre de priorités disponibles (à l'exception des limites des types de données utilisés et des microcontrôleurs RAM disponibles), mais il est recommandé d'utiliser le nombre minimum de priorités nécessaires pour éviter de gaspiller la mémoire. Si vous passez la valeur uxPriority ci-dessus (configMAX_PRIORITIES-1), la priorité attribuée à la tâche sera plafonnée silencieusement à la valeur légale maximale.
puxStackBuffer Doit pointer vers un tableau de variables StackType_t avec au moins un index ulStackDepth (voir le paramètre ulStackDepth ci-dessus). Le tableau sera utilisé comme pile de la tâche créée, il doit donc être persistant (il ne peut pas être déclaré dans le cadre de pile créé par la fonction, ou dans toute autre mémoire qui peut être légalement remplacée lors de l'exécution de l'application).
pxTaskBuffer Doit pointer vers une variable de type StaticTask_t. Cette variable sera utilisée pour enregistrer la structure de données (TCB) de la tâche créée, elle doit donc être persistante (non déclarée dans le cadre de pile créé par la fonction, ni dans aucune autre mémoire pouvant être écrasée légalement lors de l'exécution de l'application). De).

Valeur de retour

Valeur de retour Signification
Aucun Impossible de créer la tâche car puxStackBuffer ou pxTaskBuffer est vide
Toute autre valeur Si une valeur non nulle est renvoyée, la tâche est créée et la valeur renvoyée est le handle de la tâche créée.

Utilisez des routines

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

Explication

Dans FreeRTOSConfig.h, configSUPPORT_DYNAMIC_ALLOCATION doit être défini sur 1 (prendre en charge l'application de mémoire dynamique), ou simplement non défini pour rendre cette fonction disponible.

Freertos plus excitant

Publié 163 articles originaux · louange 183 won · vues 120 000 +

Je suppose que tu aimes

Origine blog.csdn.net/qq_31339221/article/details/102648040
conseillé
Classement