比如:在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次。
很巧,我手头一个STM32的RTC驱动,但我没搞STM32,所以请教您一个问题:
附件代码中439行RtcGetTimerValue 函数,返回的是当前时间转换为总的毫秒吗? TimerTime_t的类型是uint32,这样岂不会有溢出?
谢谢啦
但是手册上明确写明了这是同步标志,用于处理临界区问题。
因此你调用库的时候,应该是没调用 RTC_WaitForSynchro 这个函数,这是 HAL 库里唯一用到 RSF 位的函数,猜测能解决你的问题
试过了,目前为止没有出现异常。
RTC_WaitForSynchro();
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStructure);
已解决,谢谢
一周热门 更多>