fix(rtc): 修复TimeSync东八区偏移越界导致0~8点反复重启

根因: TimeSync中td->tm_hour+8, 当UTC为16:00~23:59(北京0:00~7:59)时
加8溢出为24~31, 超出RTC 24小时制合法范围(0~23), 触发
RTC_SetDateTime的DDL_ASSERT断言失败, Ddl_AssertHandler死循环,
看门狗超时复位, 导致设备在0点到8点整反复重启。

修复: 将东八区偏移+8小时先加到时间戳ts上, 再经localtime折算
年月日时分秒, tm_hour始终在0~23, 日期/月份也能正确进位。
This commit is contained in:
2026-08-23 14:35:58 +08:00
parent 4cf73b5a0f
commit a4c33daa89
+2 -1
View File
@@ -1506,13 +1506,14 @@ void TimeSync(time_t ts)
struct tm *td; struct tm *td;
stc_rtc_date_time_t RtcDateTime; stc_rtc_date_time_t RtcDateTime;
ts += 8 * 3600; //东八区偏移,先加到时间戳再折算,避免tm_hour加8越界(24~31)
td = localtime(&ts); td = localtime(&ts);
RtcDateTime.u8Year = td->tm_year - 100; RtcDateTime.u8Year = td->tm_year - 100;
RtcDateTime.u8Month = td->tm_mon + 1; RtcDateTime.u8Month = td->tm_mon + 1;
RtcDateTime.u8Day = td->tm_mday; RtcDateTime.u8Day = td->tm_mday;
RtcDateTime.u8Weekday = td->tm_wday; RtcDateTime.u8Weekday = td->tm_wday;
RtcDateTime.u8Hour = td->tm_hour + 8; RtcDateTime.u8Hour = td->tm_hour;
RtcDateTime.u8Minute = td->tm_min; RtcDateTime.u8Minute = td->tm_min;
RtcDateTime.u8Second = td->tm_sec; RtcDateTime.u8Second = td->tm_sec;