仁以绍天下: 你好,我在用这个芯片,最后数据的频率是fmod = SCLK/2, fdata = fmod/32, 请问最后怎样读取数据呢,因为数据速率很慢,用SCLK没法读
最近项目中需要上传包含时间戳的设备数据到服务器平台。原本想把“年”,“月”,“日”,“时”,“分”, “秒”分别用一个uint8_t的数据类型去存储,即占用6个字节。但是在平台配置协议时,只有一种叫“Unix时间戳”的数据类型。Unix时间戳只占用4个字节,而且Unix时间戳在服务器端更加通用,但是在单片机上没有想Linux环境下现成的time(),localtime(),mktime()等库函数调用。所以考虑自己实现Unix时间戳和北京时间的相互转换。
例如:一个小时表示为Unix时间戳格式为:3600秒;一天表示为Unix时间戳为86400秒。
调用后会返回一个time_t类型的值(即long)。由于在大多数32位的设备上,long为4个字节有符号数,所以最大秒数为:2^23,大约2038年就会存在溢出的问题。所以后面的设备都用64位去存储,当然这不是本文探讨的地方。
这个转换比较简单,用当前的时间的年月日时分秒,依次减去1970/1/1 00:00:00即可。只要注意闰年的情况就行,最后注意需要加上北京时区的8个小时。
不严谨的说每隔4年就有一个闰年(此处暂不考虑2100年这样的非闰年,因为time_t限制,可取的范围只有1970~2038),所以可以将4年看做一个周期(即365+365+365+366=1461天)。通过总天数除以1461得到周期的个数,然后1970加上周期的个数乘以4就是年份。总天数对1461取余就是这个周期内的天数,然后根据平闰年去判断年月日时分秒。

