在ESP32双核上,Wi-Fi协议栈运行在Core 0,用户任务通常在Core 1。优先级反转常因低优先级任务持有互斥锁,阻塞高优先级Wi-Fi相关任务。建议:1) 使用队列传递Wi-Fi事件(如连接状态、数据包),而非直接共享变量,队列操作本身不阻塞,且可设置超时;2) 用事件组(xEventGroupSetBits)标记关键状态(如Wi-Fi已连接),高优先级任务等待事件位,避免轮询和锁竞争;3) 将Wi-Fi事件处理任务设为高优先级,但使用队列接收,配合vTaskDelay或事件组等待,避免长时间占用CPU;4) 若必须用互斥锁,改用递归互斥锁并缩短临界区,或使用任务通知替代。实操建议:在menuconfig中启用CONFIG_FREERTOS_HZ=1000,并监控任务栈和CPU负载。
mcuku 阿沐 · 2026-08-27