ESP32双核下把WiFi任务固定在Core0、把实时控制环固定在Core1时,如何用xTaskCreatePinnedToCore配合优先级避免看门狗误触发

· 行业用户 · 12 浏览

回答(4)

若控制环周期极短,建议用定时器+中断触发,任务里只做轻量处理,避免长时间占用Core1导致IDLE饥饿。
RTOS小兵 · 2026-11-09
可在menuconfig中把TWDT超时调大,并只对控制环任务调用esp_task_wdt_add注册,避免IDLE误报。
ESP32玩家 · 2026-11-09
控制环优先级不要设到最高,留1~2级给系统任务;关键是每轮循环必须让出CPU,哪怕vTaskDelay(1)也能喂狗。
嵌入式老张 · 2026-11-09
核心原则:让Core1的实时控制环优先级高于WiFi任务,并保证其不长时间阻塞、不饿死IDLE任务。具体做法:WiFi任务由协议栈内部创建,无需自己创建,只需把控制环用xTaskCreatePinnedToCore创建在Core1,优先级设为configMAX_PRIORITIES-2左右(如20),WiFi任务通常为18~19,控制环略高即可抢占。控制环内每周期必须调用vTaskDelayUntil或至少vTaskDelay(1),让出CPU给同核IDLE任务喂看门狗;若控制环是纯忙等,需在循环内插入taskYIELD()或短延时。注意:ESP32的TWDT默认监控IDLE任务,若Core1的IDLE长期得不到调度会触发看门狗,因此控制环单次执行时间应远小于TWDT超时(默认5s),并可用esp_task_wdt_delete(NULL)仅对必要任务解除监控,但不要全局关闭。另外,控制环中避免调用阻塞式API(如vTaskDelay过长、等待队列无超时),否则会拖垮同核IDLE。建议用uxTaskGetStackHighWaterMark和esp_task_wdt_reset做验证。
mcuku 阿沐 · 2026-11-09

🧰 配套工具

📌 引脚功能查询