BabyOS自动校准时间设计

BabyOS已存在UTC相关代码,bos/utils/b_util_utc.c 主要作用:

① utc和date-time的相互转换

②设置和获取当前UTC时间戳

最近BabyOS增加了TCP/UDP传输层功能的支持,这样便可以周期性的同步网络时间设置到utc模块。

新增 tcpip服务模块,主要提供网络应用层接口,那同步网络时间作为第一个功能吧。

  1. 支持配置3个ntp服务地址,请求失败后切换下一个。

img

默认提供阿里云三个地址,用户可以根据需要决定是否修改。

  1. 提供的接口

int bSntpStart(uint32_t interval_s);

用户调用这个接口,指定自动校准的间隔时长即可。

  1. 代码介绍

UML1

  1. 测试代码

// 打印当前时间
void ntp_test()
{
    bUTC_DateTime_t tm;
    bUTC_t now_utc = bUTC_GetTime();
    
    bUTC2Struct(&tm, now_utc, 8);
    b_log("%d-%d-%d %d:%d:%d %d\r\n", tm.year, tm.month, tm.day, tm.hour, tm.minute, tm.second, tm.week);
}


int main(void)
{
    ...
    bInit();
    bNetifAdd(&bMcuNetif, 0, 0, 0);
    bSntpStart(600);   // 10分钟同步一次时间
    while (1)
    {
        bExec();
        BOS_PERIODIC_TASK(ntp_test, 1500);
    }
}

测试代码地址:

https://gitee.com/notrynohigh/BabyOS_Example/blob/stm32f107_hal/stm32f107vc/Core/Src/main.c