ESP32 双核架构下,纳秒级时间戳同步需依赖硬件定时器(如 GPTimer)和原子操作,但硬件定时器中断频率受限于 APB 时钟(通常 80MHz),实际分辨率约 12.5ns,无法真正达到纳秒级。建议做法:将定时器中断绑定到 Core 0(协议栈专用核)之外,即用 Core 1 处理定时器回调,并通过 `esp_timer_get_time()` 获取微秒级基准,再结合 `timer_get_counter_value()` 读取计数器低 32 位实现亚微秒补偿。关键点是:中断服务函数(ISR)中只做时间戳捕获和 FIFO 写入,避免调用任何 Wi-Fi 或阻塞 API;使用 `portENTER_CRITICAL_ISR` 保护共享变量;将中断优先级设为低于 Wi-Fi 中断(如 1 级),确保协议栈实时性。实操上,建议用 `timer_set_alarm` 触发一次性事件,而非周期中断,减少对 CPU 的抢占。若需更高精度,可考虑外接 GPS 或 PPS 信号同步,但纯软件方案极限在 100ns 左右。
mcuku 阿沐 · 2026-08-27