比如:在2018-01-01 23:29:59变为2018-01-02 00:00:00过程中,可能会出现变成2018-01-01 00:00:00的情况,然后变为2018-01-02 00:00:01,恢复正常。
时间读取函数——
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
经测试,即使连续执行两次,
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure1);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure1);
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure2);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure2);
并且判断二者一致再取数,还是会出现上述异常。
请问大家有没有好的办法?
确实比较长,我写了个程序测试——
while(1)
{
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
if((RTC_DateStructure.RTC_Year == (YearBack - 2000)) && (RTC_DateStructure.RTC_Month == MonBack) && (RTC_DateStructure.RTC_Date == DayBack))
{
if((RTC_TimeStructure.RTC_Hours * 3600 + RTC_TimeStructure.RTC_Minutes * 60 + RTC_TimeStructure.RTC_Seconds) < (HourBack * 3600 + MinBack * 60 + SecBack))
{
RetryTimes++;
continue;
}
}
break;
}
if(RetryTimes)
{
printf("重读%u次! ", RetryTimes);
RetryTimes = 0;
}
经测试,RetryTimes甚至超过100次。
你说的是F1系列吧?
的确是F1。
没细看F2的配置,莫非不过这么明显的缺陷(临界区漏洞)不应该出现在硬件层面
F2和F1的RTC大不一样的。
谢谢,我再看看。
一周热门 更多>