FreeRTOS 之 xTaskCreateStatic ()

xTaskCreateStatic () - Funktionsanalyse

task. h

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

Zusammenfassung

Erstellen Sie eine neue Aufgabeninstanz.
Jede Task benötigt RAM, um den Taskstatus (Task Control Block oder TCB) zu speichern, und wird von der Task als Stapel verwendet. Wenn die Aufgabe mit xTaskCreate () erstellt wurde, müssen Sie automatisch RAM aus dem FreeRTOS-Heap zuweisen. Wenn Sie zum Erstellen einer Aufgabe xTaskCreateStatic () verwenden, stellt der Anwendungsschreiber RAM bereit, was zu zwei zusätzlichen Funktionsparametern führt, jedoch die statische RAM-Zuweisung zur Kompilierungszeit ermöglicht.
Die neu erstellte Aufgabe befindet sich zunächst in einem Bereitschaftszustand. Wenn jedoch keine Aufgabe mit höherer Priorität ausgeführt werden kann, wird sie sofort zu einer ausgeführten Aufgabe.
Die Aufgabe kann vor und nach dem Starten des Schedulers erstellt werden.

Parameter

Parameter Funktion
pvTaskCode Die Aufgabe ist eine einfache C-Funktion, die niemals beendet wird. Daher wird sie normalerweise als Endlosschleife implementiert. Der Parameter pvTaskCode ist nur ein Zeiger auf die Funktion (eigentlich den Funktionsnamen), die die Aufgabe implementiert.
pcName Der beschreibende Name der Aufgabe. Dies wird hauptsächlich verwendet, um das Debuggen zu erleichtern, kann aber auch zum Aufrufen von xTaskGetHandle () verwendet werden, um das Task-Handle abzurufen. Die anwendungsdefinierte Konstante configMAX_TASK_NAME_LEN definiert die maximale Länge des Namens in Zeichen - einschließlich des Nullterminators. Die angegebene Zeichenfolgenlänge überschreitet diesen Maximalwert, wodurch die Zeichenfolge automatisch abgeschnitten wird.
ulStackDepth Der Parameter puxStackBuffer wird verwendet, um das Array von StackType_t-Variablen an xTaskCreateStatic () zu übergeben. ulStackDepth muss auf die Anzahl der Indizes im Array festgelegt werden.
pvParameters Die Task-Funktion akzeptiert Parameter vom Typ "Zeiger auf void" (void *). Der pvParameters zugewiesene Wert ist der an die Aufgabe übergebene Wert. Dieser Parameter hat den Typ "Zeiger auf ungültig", damit die Aufgabenparameter jede Art von Parameter durch Zwang effektiv und indirekt empfangen können. Sie können beispielsweise einen Integer-Typ an eine Task-Funktion übergeben, indem Sie den Integer-Typ beim Erstellen der Task in einen Void-Zeiger konvertieren und dann den Void-Pointer-Parameter in der Taskfunktionsdefinition selbst wieder in die Integer konvertieren.
uxPriorität Definieren Sie die Priorität der Aufgabenausführung. Die Priorität kann von 0 (niedrigste Priorität) bis (configMAX_PRIORITIES-1) (höchste Priorität) zugewiesen werden. configMAX_PRIORITIES ist eine benutzerdefinierte Konstante. Wenn configUSE_PORT_OPTIMISED_TASK_SELECTION auf 0 gesetzt ist, gibt es keine Obergrenze für die Anzahl der verfügbaren Prioritäten (mit Ausnahme der Grenzen der verwendeten Datentypen und der verfügbaren RAM-Mikrocontroller). Es wird jedoch empfohlen, die erforderliche Mindestanzahl von Prioritäten zu verwenden, um Speicherverschwendung zu vermeiden. Durch Übergeben des obigen uxPriority-Werts (configMAX_PRIORITIES-1) wird die der Aufgabe zugewiesene Priorität stillschweigend auf den zulässigen Maximalwert begrenzt.
puxStackBuffer Muss auf ein Array von StackType_t-Variablen mit mindestens ulStackDepth-Index verweisen (siehe Parameter ulStackDepth oben). Das Array wird als Stapel der erstellten Aufgabe verwendet, muss also persistent sein (es kann nicht in dem von der Funktion erstellten Stapelrahmen oder in einem anderen Speicher deklariert werden, der bei Ausführung der Anwendung legal überschrieben werden kann).
pxTaskBuffer Muss auf eine Variable vom Typ StaticTask_t zeigen. Diese Variable wird zum Speichern der Datenstruktur (TCB) der erstellten Task verwendet. Sie muss daher persistent sein (weder im von der Funktion erstellten Stapelrahmen noch in einem anderen Speicher deklariert, der bei Ausführung der Anwendung legal überschrieben werden kann Von).

Rückgabewert

Rückgabewert Bedeutung
Keiner Aufgabe kann nicht erstellt werden, da puxStackBuffer oder pxTaskBuffer leer ist
Jeder andere Wert Wenn ein Wert ungleich Null zurückgegeben wird, wird die Aufgabe erstellt, und der zurückgegebene Wert ist das Handle der erstellten Aufgabe.

Verwenden Sie Routinen

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

Erklärung

In FreeRTOSConfig.h muss configSUPPORT_DYNAMIC_ALLOCATION auf 1 gesetzt sein (Unterstützung für dynamische Speicheranwendungen) oder einfach undefiniert sein, um diese Funktion verfügbar zu machen.

Freertos aufregender

Veröffentlicht 163 Originalartikel · Gefallen 183 · Besuchen Sie 120.000+

Ich denke du magst

Origin blog.csdn.net/qq_31339221/article/details/102648040
Empfohlen
Rangfolge