首页 > 编程知识 正文

千年虫,千年虫原理

时间:2023-05-03 11:44:40 阅读:118677 作者:1816

1、问题2019年4月6日,由于GPS的周计数,很多GPS模块的时间回到了99年,但由于GPS模块价格便宜,有些GPS模块在工厂也找不到。 这种情况下,那么多物品的网络定位产品怎么办?

2、解决方案由于GPS周计数变量采用10位变量,1024周后计数器将从零开始计数。 这样,今年就这样后退了20多年。 那么怎么解决这个问题呢? 我们读了GPRMC的信息后,直接时间加上1024周,相当于帮GPS进位。 于是这个问题解决了。 具体实施时,该如何操作?

首先将年月日换算为秒,然后1024周也换算为秒进行加法运算,然后将总秒数反算为成年月日。 到此结束。 年换算成秒的过程和秒换算成年的过程必须考虑闰年、闰月等相关因素,不计算也有问题。 当然,任何事情都必须站在巨人的肩膀上,所以直接调用时间库的函数,即time.h。

# define _ dlib _ time _ uses _ 641 time _ tt1; 结构TM tmin; 结构TM tmout; staticintweekoversizedatechange (char * cdate in,char *cDateOut ) { struct tm *tminp=tmin; 结构TM * tmoutp=tmout; char tmp[8 1]; 短信(tmp,0,sizeof ) tmp ); //strptime(cdatein,' %Y%m%d ',tminp ); tmin.tm_year=cDateIn[0]; tmin.tm_mon=cDateIn[1] - 1; tmin.tm_mday=cDateIn[2]; /* tmin.tm_year=99; tmin.tm_mon=7; tmin.tm_mday=25; (/)将tm结构数据转换为自1970年1月1日起计算的秒数)/T1=mktime(tminp ); /*计算需要增加或减少与天数对应的秒数。 因此,最后日期对应于从1970年1月1日开始计算的秒数*/t1=1024*7*60*60*24。 /*tm类型的时间转换,将time_t信息转换为真实世界的日期和时间表示,并将结果从结构tm返回到*/tmoutp=localtime(T1 )。 将tm转换为%Y%m%d格式并分配给输出。 最大长度为8 1*/strftime(tmp,81,' %Y%m%d ',tmoutp ); srcpy(cdateout,tmp ); 返回0; }记录了几个问题。

关于strptime函数

在IAR编译器中的time.h中没有这个函数,我相当不高兴。 这个函数主要起什么作用呢? 原本cDateIn和cDateOut都是字符型的数据输入,通过这个函数可以将整个字符型的年月日直接变换为十进制的数值,直接代入tm结构体的变量中。 然后调用所有库函数。 但是,IAR的time.h中没有这个函数,所以只能自己用十进制编程cDateIn,然后将其赋值给相应的结构变量,然后执行以下操作:

关于月亮

进入tm结构体后,可以看到月亮表示0-11到1-12月。 所以,对于通常显示的东西,减去1后再参加运算。 否则计算有问题。

关于tm结构赋值问题

结构TM tmin; 这个结构显然只是局部变量,而且只在局部函数中运算,所以理论上不应该定义为全部变量,但奇怪的是,我定义为局部变量后,年换算为秒的数值经常会自己发生变化。 把这个变量变更为全局变量就可以了。 我写到这里的时候,其实我还有点莫名其妙。

结果,这个结构体不应该只初始化年月日,而应该初始化时分秒。 这是因为,在计算后面的秒数的函数中,时分秒都参与运算,所以如果不初始化,后面的值就会一直跳动。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。