Problem:
Auf FreeRTOS auf dem ESP32 möchtest du einen kritischen Bereich wie diesen verwenden:
critical_zone_usage.cpp
portENTER_CRITICAL();
// Your critical code goes here!
portEXIT_CRITICAL();aber beim Kompilieren des Projekts siehst du eine Fehlermeldung wie
build_error.txt
src/main.cpp: In function 'void MyFunc(size_t, int16_t)':
/home/uli/.platformio/packages/framework-arduinoespressif32@src-f2ea83e2545300b10a69ff44ef9dc6cd/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro.h:476:75: error: too few arguments to function 'void vPortEnterCritical(portMUX_TYPE*)'
#define portENTER_CRITICAL(mux) vPortEnterCritical(mux)Lösung
Du musst portENTER_CRITICAL() und portEXIT_CRITICAL() mit einem Spinlock verwenden, d.h.
critical_zone_with_spinlock.cpp
portENTER_CRITICAL(&mySpinlock);
// TODO Dein kritischer Code kommt hier hin!
portEXIT_CRITICAL(&mySpinlock);Um ein vollständiges Beispiel zu sehen, wie man einen Spinlock in FreeRTOS initialisiert und für kritische Bereiche verwendet, siehe unseren vorherigen Post ESP32 kritischer Bereich Beispiel mit FreeRTOS / PlatformIO
Ä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