Проблема:
На FreeRTOS на ESP32 ви хочете використати критичну зону так:
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() зі spinlock, тобто
critical_zone_with_spinlock.cpp
portENTER_CRITICAL(&mySpinlock);
// TODO Ваш критичний код розміщується тут!
portEXIT_CRITICAL(&mySpinlock);Щоб побачити повний приклад того, як ініціалізувати spinlock у FreeRTOS і використовувати його для критичних зон, див. наш попередній пост Приклад критичної зони ESP32 з використанням FreeRTOS / PlatformIO
Дивіться схожі статті за категоріями:
Arduino ESP8266/ESP32 FreeRTOS PlatformIO
Якщо ця стаття допомогла вам, будь ласка, подумайте про те, щоб купити мені каву або зробити пожертву через PayPal на підтримку досліджень та публікації нових статей на TechOverflow