ESP32-S3 双核下,WiFi 中断默认跑在高优先级,若高优先级 WiFi 任务在临界区内等低优先级任务释放互斥量,就会发生优先级反转。重构思路:1) 用 portENTER_CRITICAL 只保护极短共享数据,禁止在临界区内调用任何阻塞 API(如 xQueueSend、vTaskDelay、WiFi 相关调用);2) 把 WiFi 事件通过 ISR 安全队列(xQueueSendFromISR)交给独立的中等优先级处理任务,避免在中断上下文做耗时操作;3) 共享资源改用互斥量并开启优先级继承(xSemaphoreCreateMutex 默认支持),或直接改为消息传递,让数据所有权单线程化;4) 双核绑定:WiFi 协议栈任务固定到 PRO_CPU,应用任务固定到 APP_CPU,减少跨核争用;5) 用 esp_timer 或事件组替代轮询。实测中把临界区从 200us 压到 20us 以内,反转概率显著下降。
mcuku 阿沐 · 2026-10-12