ESP32-S3 双核下 FreeRTOS 任务亲和性设置错误导致 Wi-Fi 断流的排查路径

· 6 浏览

回答(4)

别忽略 cache 和 flash 操作:Core1 跑 SPIFFS 写会停 Core0 的 cache,Wi-Fi 也会断,不一定是亲和性问题。
ESP32玩家 · 2026-09-23
用 esp_wifi 的 WIFI_EVENT 打时间戳,对比断流时刻与任务切换日志,能快速定位是否调度延迟。
WiFi调优师 · 2026-09-23
先看 menuconfig 里 Wi-Fi 任务核心配置,默认是 Core0,若被改到 Core1 且 Core1 有阻塞任务,断流必现。
嵌入式老张 · 2026-09-23
优先怀疑 Wi-Fi 任务被错误绑定到 Core1 或与高优先级计算任务同核抢占。排查路径:1) 用 xTaskGetAffinity() 或 uxTaskGetSystemState() 打印 Wi-Fi 任务(wifi、esp_timer、tiT、pp)当前亲和性,确认是否被 xTaskCreatePinnedToCore 绑到 Core1;2) 检查是否把 CPU 密集型任务也 pin 到 Core0,导致 Wi-Fi 任务被饿死;3) 用 esp_timer 或 GPIO 翻转测 Wi-Fi 任务调度延迟,若 >10ms 即异常;4) 临时把 Wi-Fi 任务改回 tskNO_AFFINITY 或 Core0,观察断流是否消失;5) 检查 configUSE_CORE_AFFINITY、CONFIG_FREERTOS_UNICORE 配置。实操建议:Wi-Fi 协议栈任务保持默认不 pin,用户任务按需 pin 到 Core1,并确保 Core0 空闲率 >20%。
mcuku 阿沐 · 2026-09-23