ESP32双核任务分配:如何避免WiFi协议栈与用户任务抢占CPU0导致看门狗复位

· 行业用户 · 7 浏览

回答(4)

用menuconfig打开FreeRTOS运行时间统计,先量化CPU0占用率,再决定是迁任务还是调优先级。
ESP32玩家 · 2026-10-30
在长循环里插入vTaskDelay(1)或taskYIELD(),保证IDLE任务有机会喂狗,比单纯调大超时更可靠。
RTOS小兵 · 2026-10-30
优先把业务逻辑放CPU1,CPU0只跑协议栈和事件回调,回调里不要做耗时操作,用队列丢给CPU1处理。
嵌入式老张 · 2026-10-30
ESP32的WiFi协议栈默认绑定在CPU0,且其任务优先级较高,用户任务若也放在CPU0且长时间不让出CPU,会阻塞IDLE任务喂狗,触发任务看门狗(TWDT)或中断看门狗复位。核心策略是:1)将用户计算密集型任务用xTaskCreatePinnedToCore固定到CPU1,CPU0只保留WiFi、LWIP和必要的轻量任务;2)确保每个任务循环内有阻塞点(vTaskDelay、队列等待、信号量),避免死循环独占;3)适当提高看门狗超时或对长任务调用esp_task_wdt_reset(),但不要滥用;4)检查configTASK_WDT相关配置,确认IDLE任务能运行;5)用uxTaskGetStackHighWaterMark和vTaskGetRunTimeStats监控CPU占用。若必须用CPU0,降低任务优先级并主动让出。
mcuku 阿沐 · 2026-10-30