Чтобы войти в критическую секцию на ESP32 с использованием FreeRTOS, вам нужно сделать следующее:
Глобально объявите спинлок:
esp32_spinlock_declare.cpp
portMUX_TYPE mySpinlock;В setup(), инициализируйте спинлок:
esp32_spinlock_init.cpp
spinlock_initialize(&mySpinlock);Теперь, где бы вы ни хотели войти в критическую секцию, выполните:
esp32_critical_section_example.cpp
portENTER_CRITICAL(&mySpinlock);
// TODO Your critical code goes here!
portEXIT_CRITICAL(&mySpinlock);При использовании этого в обработчике прерываний используйте вместо этого:
esp32_critical_section_isr_example.cpp
portENTER_CRITICAL_ISR(&mySpinlock);
// TODO Your critical code goes here!
portEXIT_CRITICAL_ISR(&mySpinlock);FreeRTOS обеспечит, что никакие два потока, использующие mySpinlock, не будут выполняться одновременно.
Check out similar posts by category:
Arduino ESP8266/ESP32 FreeRTOS PlatformIO
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow