使用 FreeRTOS / PlatformIO 的 ESP32 临界区示例
要在 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 你的临界区代码放在这里!
portEXIT_CRITICAL(&mySpinlock);当在中断处理程序中使用此功能时,改用:
esp32_critical_section_isr_example.cpp
portENTER_CRITICAL_ISR(&mySpinlock);
// TODO 你的临界区代码放在这里!
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