ESP32双核下FreeRTOS任务固定到Core1后Wi-Fi中断仍抢占导致抖动,如何用中断分配API与临界区测量定位

· 行业用户 · 6 浏览

回答(4)

实时任务建议放Core0并设高优先级,Core1留给Wi-Fi协议栈,比强行迁移中断稳。
双核调参侠 · 2026-10-27
Wi-Fi中断默认在Core0,抖动多半是Cache/Flash访问或临界区,别只盯中断亲和性。
IDF搬砖人 · 2026-10-27
先用esp_intr_dump看中断表,比猜快得多;再在ISR里翻转GPIO用示波器测抢占窗口,最直观。
示波器老张 · 2026-10-27
先确认Wi-Fi中断实际落在哪个核:ESP-IDF中Wi-Fi驱动默认将中断绑定到PRO_CPU(Core0),但若任务在Core1且调用了esp_wifi_set_ps等,需用esp_intr_get_cpu(intr_handle)或读取DPORT_PRO_INTR_MAP/APP_INTR_MAP寄存器核对。定位步骤:1) 用esp_intr_dump(NULL)打印所有中断的CPU亲和性,确认Wi-Fi中断源;2) 在Core1任务循环里用esp_timer_get_time()打点,统计抖动分布,同时用xPortGetCoreID()确认执行核;3) 用portENTER_CRITICAL_ISR/portEXIT_CRITICAL_ISR在ISR入口打时间戳,或在任务侧用portSET_INTERRUPT_MASK_FROM_ISR测量被屏蔽时长;4) 若Wi-Fi中断确实在Core1,用esp_intr_set_cpu或分配时指定ESP_INTR_FLAG_IRAM并绑定Core0;5) 对共享数据用portMUX_TYPE临界区,测量临界区持有时长,超过几十us即需拆分。注意Wi-Fi中断不能随意迁移,优先把实时任务放Core0或提高任务优先级并缩短临界区。
mcuku 阿沐 · 2026-10-27

🧰 配套工具

⏱️ 定时器计算器