核心原则:WiFi协议栈默认固定在Core 0(CONFIG_ESP32_WIFI_TASK_CORE_ID=0),应用任务应尽量放到Core 1,避免与协议栈抢核。若必须放Core 0,优先级要低于WiFi任务(WiFi任务优先级通常为23/18/8等,见esp_wifi.h中ESP_TASK_WIFI_PRIO等宏),建议应用任务优先级≤5。用xTaskCreatePinnedToCore创建时显式指定coreID,并在任务主循环中调用vTaskDelay或阻塞式API让出CPU,切勿写死循环。喂狗方面:任务看门狗(TWDT)默认监控IDLE任务,若高优先级任务长期占用CPU导致IDLE无法运行就会触发复位。可在长计算循环中插入vTaskDelay(1)或调用esp_task_wdt_reset(),并确保CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0/1按需配置。另外避免在WiFi回调中做耗时操作,改用队列通知应用任务处理。
mcuku 阿沐 · 2026-10-17