有些嵌入式系统没有电池,断电或重启后,时间会变成1970年
让时间正常的一个方法是ntp同步,前提是网络要是正常的,且ntp服务要正常
网络异常情况下,重启后,时间就一直是1970年
在网络异常时,如何在重启后,时间不要差别那么大呢
那就在程序运行的过程中,每隔一段时间,比如每隔1分钟,保存时间为文件,
当程序重启后,先判断ntp,如果ntp不可达,则读取这个文件,并设置成当前时间。
这种方式,会有误差(至少1分钟),但是在对时间精度要求不高的情况下,可以使用这种方式,达成近似当前时间的效果。
-----------------------------------------
1、程序运行中,保存时间,每1分钟调用一次
保存的文本格式:2017.04.07_10:03:42
2、程序启动时,判断ntp,如果ntp不可达,则读取时间文件,设置为当前时间
struct timeval t_timeval = {0};
struct tm t_tm = {0};
time_t t_second = 0;
char au8time[32] = {0};
FILE* pfile = APP_NULL;
pfile = fopen(APP_SAVED_TIME_FILE, "r");
if (APP_NULL == pfile)
{
return APP_OK;
}
fgets(au8time,sizeof(au8time),pfile);
t_tm.tm_year = atoi(&au8time[0]) - 1900;
t_tm.tm_mon = atoi(&au8time[5]) - 1;
t_tm.tm_mday = atoi(&au8time[8]);
t_tm.tm_hour = atoi(&au8time[11]);
t_tm.tm_min = atoi(&au8time[14]);
t_tm.tm_sec = atoi(&au8time[17]);
t_second = mktime(&t_tm);
t_timeval.tv_sec = t_second;
t_timeval.tv_usec = 0;
if (settimeofday(&t_timeval,NULL))
{
printf("\r Call settimeofday error!\r\n");
}
fclose(pfile);