ESP32 kritischer Bereich Beispiel mit FreeRTOS / PlatformIO

Um einen kritischen Bereich auf dem ESP32 mit FreeRTOS zu betreten, musst du Folgendes tun:

Deklariere global einen Spinlock:

esp32_spinlock_declare.cpp
portMUX_TYPE mySpinlock;

In setup(), initialisiere den Spinlock:

esp32_spinlock_init.cpp
spinlock_initialize(&mySpinlock);

Jetzt, wo immer du einen kritischen Bereich betreten willst, führe aus:

esp32_critical_section_example.cpp
portENTER_CRITICAL(&mySpinlock);
// TODO Dein kritischer Code kommt hier hin!
portEXIT_CRITICAL(&mySpinlock);

Bei Verwendung in einem Interrupt-Handler verwende stattdessen:

esp32_critical_section_isr_example.cpp
portENTER_CRITICAL_ISR(&mySpinlock);
// TODO Dein kritischer Code kommt hier hin!
portEXIT_CRITICAL_ISR(&mySpinlock);

FreeRTOS stellt sicher, dass keine zwei Threads, die mySpinlock verwenden, gleichzeitig ausgeführt werden.


Ähnliche Beiträge nach Kategorie: Arduino ESP8266/ESP32 FreeRTOS PlatformIO