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
Wenn dieser Beitrag dir geholfen hat, erwäge, mir einen Kaffee zu spendieren oder per PayPal zu spenden, um die Recherche und Veröffentlichung neuer Beiträge auf TechOverflow zu unterstützen