Barrier Synchronization in FreeRTOS – wie geht das?

FreeRTOS bietet kein direktes Barrier-Primitive. Du kannst aber Barrieren mit Hilfe von Counting Semaphores oder Event Groups bauen. Beispiel mit Counting Semaphore:

SemaphoreHandle_t barrier;
int barrier_count = 0;

void task_func(void *params) {
    // Vor der Barrier
    // ... Code ...

    xSemaphoreTake(mutex, portMAX_DELAY);
    barrier_count++;
    if (barrier_count == NUM_TASKS) {
        for (int i = 0; i < NUM_TASKS; i++) {
            xSemaphoreGive(barrier); // Freigabe für alle
        }
    }
    xSemaphoreGive(mutex);

    xSemaphoreTake(barrier, portMAX_DELAY);

    // Nach der Barrier
}

Oder mit EventGroup (bitmasking für Synchronisierung).

com

Newsletter Anmeldung

Bleiben Sie informiert! Wir informieren Sie über alle neuen Beiträge (max. 1 Mail pro Woche – versprochen)