Щоб увійти в критичну зону на ESP32 з використанням FreeRTOS, вам потрібно зробити наступне:
Глобально оголосіть spinlock:
esp32_spinlock_declare.cpp
portMUX_TYPE mySpinlock;У setup(), ініціалізуйте spinlock:
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, не виконуватимуться одночасно.
Дивіться схожі статті за категоріями:
Arduino ESP8266/ESP32 FreeRTOS PlatformIO
Якщо ця стаття допомогла вам, будь ласка, подумайте про те, щоб купити мені каву або зробити пожертву через PayPal на підтримку досліджень та публікації нових статей на TechOverflow