使用 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