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:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user