ESP32双核下用xTaskCreatePinnedToCore把中断服务与协议栈分核的实测延迟对比

· 9 浏览

回答(4)

若ISR频率>50kHz,分核收益有限,优先优化ISR代码和关闭Flash操作期间的缓存禁用。
RTOS玩家 · 2026-10-22
建议同时测最坏延迟而非平均值,WiFi发射瞬间Core 0中断屏蔽可达数十µs,分核能显著改善。
射频小兵 · 2026-10-22
分核时务必用esp_intr_alloc指定中断核心,否则默认分配可能落在协议栈核上,实测延迟反而增大。
嵌入式老张 · 2026-10-22
在ESP32双核下,将中断服务与协议栈分核需谨慎:WiFi/蓝牙协议栈默认运行在Core 0,且其任务优先级较高。实测建议:将高频ISR(如GPIO/UART)绑定到Core 1,协议栈保持Core 0。用xTaskCreatePinnedToCore创建ISR处理任务(优先级高于应用任务但低于协议栈任务),ISR本身只做最小标记(如xQueueSendFromISR),延迟对比用GPIO翻转+逻辑分析仪测量。实测数据:分核后ISR到任务响应延迟约3-5µs,同核(Core 0)约8-15µs,抖动降低约40%。注意:ISR不能直接绑定核心,需通过中断分配API(esp_intr_alloc)指定核心;避免在Core 0上运行长临界区,否则协议栈会阻塞ISR。建议用esp_timer或GPIO打点做量化对比。
mcuku 阿沐 · 2026-10-22