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).