增加了一些架构图片

This commit is contained in:
2026-09-02 10:06:14 +08:00
parent 7f0087d430
commit 3f0ea5761c
2 changed files with 94 additions and 33 deletions
+21 -13
View File
@@ -95,21 +95,29 @@ static volatile uint32_t s_base_unix_secs = UINT32_MAX; /* 基准对应的 Unix
## 6. 初始化流程(`sys_clock_init`)
```
Step 1 从 SD2506 读取初始时间 sd2506_get_time(&sd_time)
├─ 注意:sd_time.year 已是完整年份(驱动内已 +2000),
│ 后续换算【不得】再加 2000,否则年份虚增 → Unix 秒数超 uint32 回绕
└─ 可选校时(见第 9 节 RTC_DEFAULT_INIT_* 宏)
```mermaid
sequenceDiagram
autonumber
participant SC as sys_clock_init
participant RTC as SD2506 RTC
participant HAL as HAL Tick
Step 2 将 RTC 时间换算为 Unix epoch 秒数
├─ 累计 1970 至当前年份的整年天数(含闰年 366 天判定)
├─ 加上当年 1 月至当前月的累计天数
├─ 加当月已过天数、时/分/秒
└─ 用 int64_t 累加,避免中间溢出;结果截断存入 uint32_t(受 2038 限制,见第 12 节)
Note over SC,RTC: Step 1 从 SD2506 读取初始时间
SC->>RTC: sd2506_get_time(sd_time)
RTC-->>SC: sd_time(year 已是完整年份)
Note right of SC: 后续换算【不得】再加 2000<br>否则年份虚增 → Unix 秒数超 uint32 回绕
Note right of SC: 可选校时(见第 9 节 RTC_DEFAULT_INIT_* 宏)
Step 3 建立基准
s_base_tick = HAL_GetTick();
s_base_unix_secs = (uint32_t)unix_secs;
Note over SC: Step 2 将 RTC 时间换算为 Unix epoch 秒数
SC->>SC: 累计 1970 至当前年份的整年天数(含闰年 366 天判定)
SC->>SC: 加上当年 1 月至当前月的累计天数
SC->>SC: 加当月已过天数、时/分/秒
SC->>SC: 用 int64_t 累加,避免中间溢出;结果截断存入 uint32_t(受 2038 限制,见第 12 节)
Note over SC,HAL: Step 3 建立基准
SC->>HAL: HAL_GetTick()
HAL-->>SC: 当前 tick
Note right of SC: s_base_tick = HAL_GetTick()<br>s_base_unix_secs = (uint32_t)unix_secs
```
初始化后,所有后续取时都基于 Step 3 的基准推算,不再访问 RTC。