tinnu 发表于 2017-11-25 12:11:11

水墨画定时控制系统:gokit时间获取及其分析3

本帖最后由 tinnu 于 2018-2-7 21:47 编辑

之前跟着机智云社区某位大神的例程走,后来才发现原来这个版本自动生成的代码已经带有时间获取的API,估计是大神那个时候的版本太低才需要自己写。
前面两张帖子是我根据大神例程的学习机智云代码结构的总结,不过不知道是什么原因发不出来。

(一)网络时间获取的API
1、官方定义的命令:

对应的操作函数:

时间获取函数:

那么只需要在case里面更新时间就可以了。


2、来分析一下gizGetTimerCount()函数:
看看timerMsCount:


看看gizTimerMs():


看看TIMER_IRQ_FUN():


竟然是个中断!

这就是个定时器3的中断处理函数!
看看定时器3的使能是怎么样的:

可以算出溢出时间是(7199+1)*(9+1)/72000000=0.001s=1ms,其实从gizTimerMs的函数名就可以看出来。
综上所述,timerMsCount就是一个计算从开机到目前的毫秒数,它的定义:
static uint32_t timerMsCount;
是一个无符号32位整型,算一下,可以整整维持接近50天连续开机的计算。
所以例程中这一句:

如果要定时1s的话,SAMPLING_TIME_MAX=1000。

(二)实现:
定义结构体:
typedef struct{
      uint16_t year;
      uint16_t month;
      uint16_t day;
      uint16_t hour;
      uint16_t minute;
      uint16_t second;
}mytime_t;
extern mytime_t mytime;


在case ACK_GET_NTP,里面:


userHandle里面,上面定义一个:#define SAMPLING_TIME_MAX 1000


效果展示:






Angle丶 发表于 2020-3-24 03:05:48

好帖 mark2020.3.24

new_day 发表于 2020-3-26 23:29:36

请教大神,星期怎么获取

Fily1983 发表于 2020-5-28 17:33:36

这个应该不是从网络获取的时间呀,这个时间走了好就会有误差的
页: [1]
查看完整版本: 水墨画定时控制系统:gokit时间获取及其分析3