BabyOS自动校准时间设计
BabyOS已存在UTC相关代码,bos/utils/b_util_utc.c 主要作用:
① utc和date-time的相互转换
②设置和获取当前UTC时间戳
最近BabyOS增加了TCP/UDP传输层功能的支持,这样便可以周期性的同步网络时间设置到utc模块。
新增 tcpip服务模块,主要提供网络应用层接口,那同步网络时间作为第一个功能吧。
支持配置3个ntp服务地址,请求失败后切换下一个。
默认提供阿里云三个地址,用户可以根据需要决定是否修改。
提供的接口
int bSntpStart(uint32_t interval_s);
用户调用这个接口,指定自动校准的间隔时长即可。
代码介绍
测试代码
// 打印当前时间
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