ESP32-S3 双核下,WiFi 中断默认在 PRO_CPU(CPU0)以较高优先级运行,而用户任务常被 pinned 到 APP_CPU(CPU1)。若任务持有互斥量并调用 WiFi API,WiFi 任务可能因等待该互斥量被阻塞,形成优先级反转。实测方法:用 xTaskCreatePinnedToCore 创建高优先级任务(如 prio 10)和低优先级任务(prio 2),低优先级任务先获取互斥量并延时,高优先级任务再尝试获取,同时触发 WiFi 收发。用 esp_timer 或 GPIO 翻转测延迟,可见高优先级任务被低优先级任务阻塞数百微秒至毫秒级。规避:1) 使用 xSemaphoreCreateMutex 并启用优先级继承(FreeRTOS 默认支持);2) 避免在持有互斥量时调用 WiFi 阻塞 API,改为队列传递数据;3) 将 WiFi 相关任务统一 pin 到 PRO_CPU,减少跨核竞争;4) 关键区用 taskENTER_CRITICAL 时尽量短。若仍反转,可启用 CONFIG_FREERTOS_USE_TICKLESS_IDLE 并调整 WiFi 任务优先级。
mcuku 阿沐 · 2026-10-05