如何修复 ESP32 FreeRTOS 错误:too few arguments to function 'void vPortEnterCritical(portMUX_TYPE*)'
问题:
在 ESP32 上的 FreeRTOS 中,你想使用这样的临界区:
critical_zone_usage.cpp
portENTER_CRITICAL();
// 你的临界区代码放在这里!
portEXIT_CRITICAL();但编译项目时,你看到类似这样的错误消息
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)解决方案
你需要使用带自旋锁的 portENTER_CRITICAL() 和 portEXIT_CRITICAL(),即
critical_zone_with_spinlock.cpp
portENTER_CRITICAL(&mySpinlock);
// TODO 你的临界区代码放在这里!
portEXIT_CRITICAL(&mySpinlock);要查看如何在 FreeRTOS 中初始化自旋锁并将其用于临界区的完整示例,请查看我们之前的文章 使用 FreeRTOS / PlatformIO 的 ESP32 临界区示例
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