ESP32-S3 双核下,Wi-Fi 中断默认跑在 CPU0,优先级高于普通任务。若你把 Wi-Fi 相关任务(如 esp_wifi 回调、lwIP)固定在 CPU1 且优先级低于一个占用互斥锁的普通任务,就会出现典型优先级反转:高优先级 Wi-Fi 任务等锁,低优先级任务被中优先级任务抢占,导致 Wi-Fi 丢包或超时。实测方法:用 xTaskCreatePinnedToCore 把 Wi-Fi 任务钉在 CPU1,优先级设 5;再建一个低优先级任务(优先级 2)持有互斥锁并做长临界区,同时建一个中优先级任务(优先级 4)空转。用 esp_timer 测 Wi-Fi 任务从就绪到获得锁的延迟,可看到毫秒级抖动。规避:1) 使用 xSemaphoreCreateMutex 并开启优先级继承(FreeRTOS 默认支持);2) 缩短临界区,避免在锁内调用 vTaskDelay;3) 把 Wi-Fi 任务优先级设到高于所有可能持锁任务;4) 关键 Wi-Fi 处理放 CPU0,与中断同核减少跨核竞争。
mcuku 阿沐 · 2026-09-20