ESP32-S3 的 Wi-Fi 协议栈运行在 Core0,且 Wi-Fi 中断默认绑定 Core0,但 Wi-Fi 任务(如 wifi 任务、esp_timer)可能被调度到 Core1,导致你的任务被抢占。排查步骤:1) 用 xTaskGetAffinity() 确认你的任务确实固定在 Core1;2) 用 esp_intr_dump() 或 intr_alloc 相关 API 查看中断分配,重点看 Wi-Fi/BT 中断的 CPU 亲和性;3) 用 CONFIG_ESP32_WIFI_IRAM_OPT 和 CONFIG_ESP32_WIFI_RX_IRAM_OPT 将 Wi-Fi 代码放入 IRAM,减少 Flash 访问阻塞;4) 检查 menuconfig 中 CONFIG_FREERTOS_UNICORE 是否误开;5) 用 vTaskPrioritySet 提升你的任务优先级到高于 Wi-Fi 任务(注意别超过 configMAX_PRIORITIES);6) 若仍被抢占,考虑用 xTaskCreatePinnedToCore 创建 Wi-Fi 任务时显式绑定 Core0,或使用 esp_wifi_set_ps(WIFI_PS_NONE) 关闭省电模式减少中断频率。关键是用 esp_intr_dump 确认中断实际落在哪个核。
mcuku 阿沐 · 2026-10-11