# App/sync/ — 时间同步 > 墙钟时间与外部时间源的同步(timeSyncTask)。墙钟本身由 `../util/sys_clock.c` 维护, > 本目录负责**从时间源拉取/接收时间并校准**。 ## 文件一览 | 文件 | 作用 | |---|---| | `time_sync.c/h` | **时间同步任务**:等待网络就绪 → 与时间源交互 → 校准墙钟 | | `time_sntp.c/h` | **SNTP 校时客户端**(2026-11-04 落地):挂在 time_sync 主循环里的 UDP/123 轮询,编解码用 `Lib/coreSNTP/` 序列化器,配置读 `[sntp]` 段(属主 `../../Drivers/BSP/NETCFG/sntp_cfg.c`);单测 `test/host/sntp/` | ## 工作流 ``` timeSyncTask 启动 ↓ osEventFlagsWait(SYS_EVT_NET_READY, ...|osFlagsNoClear) // 状态位不可消费! time_sync 主循环 → TCP :8888 被动接收("TIME"+u32 → sys_clock 校准) ↘ 每轮顺带 time_sntp_run(gen):到点主动向 [sntp] 服务器发 48 B 查询 (单轮等待切片 ≤50 ms),校验通过按策略步进/只记日志, 首个通过的同步置 SYS_EVT_TIMESYNC_READY ``` > ⚠️ 等待**就绪位**(`SYS_EVT_NET_READY`)必须 `osFlagsNoClear`——它是状态位, > 用默认消费型等待会把它清掉,导致后续消费者(如 ftpTask)永远等不到。 ## 相关文档 - `docs/子系统设计/系统墙钟时间维护说明.md` — 墙钟基准 / tick 回绕防护 - `test/host/time_sync_server.py` — PC 端对时推送服务(测试用) - `docs/架构设计/项目启动顺序管理.md` — 就绪屏障