linux嵌入式系统时间维护方案1

有些嵌入式系统没有电池,断电或重启后,时间会变成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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值