先确认抖动来源:用 esp_timer 或 GPIO 翻转测量自定义任务的实际周期,同时抓取 Wi-Fi 任务(wifi 任务通常运行在 PRO_CPU)的 CPU 占用。常见根因是 Wi-Fi 驱动内部使用高优先级任务和中断,即使固定核也会抢占同核低优先级任务。排查路径:1) 检查自定义任务优先级是否低于 Wi-Fi 任务(如 tcpip_adapter 任务优先级 18),若低于则被抢占;2) 确认是否启用了 Wi-Fi 省电模式(WIFI_PS_MIN_MODEM),省电模式会导致周期性唤醒抖动,可暂时关闭测试;3) 检查是否在自定义任务中调用了阻塞式 API(如 vTaskDelay 精度不足、非线程安全打印),改用 esp_timer 高精度延时;4) 若必须严格实时,将自定义任务固定到 APP_CPU 并提升优先级至高于 Wi-Fi 任务,但注意 Wi-Fi 任务可能跨核迁移,需用 xTaskCreatePinnedToCore 并设置 configTASKS_AFFINITY 或关闭 SMP 调度迁移;5) 最后用 IDF 的 esp_timer 回调或硬件定时器替代任务轮询,减少对 CPU 调度的依赖。
mcuku 阿沐 · 2026-10-09