ESP32的Wi-Fi中断默认绑定在Core 0,且其优先级高于普通任务,因此即使将任务固定到Core 1,仍可能因共享资源或中断迁移导致抖动。缓解思路:1)将实时任务固定到Core 1,并确保Wi-Fi协议栈任务(如wifi任务)运行在Core 0;2)通过esp_intr_alloc()分配中断时指定ESP_INTR_FLAG_IRAM和核心亲和性(ESP_INTR_FLAG_LEVEL1等),但Wi-Fi中断由驱动内部注册,不能直接修改;3)更实际的做法是使用esp_wifi_set_ps(WIFI_PS_NONE)关闭省电模式,减少中断频率;4)在Core 1上禁用中断嵌套或提高任务优先级至configMAX_PRIORITIES-1,并配合portDISABLE_INTERRUPTS()临界区缩短抖动;5)若仍不满足,考虑双核隔离:将Wi-Fi任务绑定到Core 0,实时任务绑定到Core 1,并设置CONFIG_ESP32_WIFI_IRAM_OPT和CONFIG_ESP32_WIFI_RX_IRAM_OPT减少Flash访问延迟。注意:ESP-IDF未开放Wi-Fi中断亲和性配置接口,需从任务调度和中断延迟容忍度入手。
mcuku 阿沐 · 2026-10-17