对于低端嵌入式微控制器(8位),哪个时间戳结构最小?我也在考虑定制的。由于计算能力非常有限,读取秒,小时或日等也很重要。
This question涵盖了我的问题,但我需要代表接下来的最低10年,解决第二个问题。
更新 我将在有限的EEPROM空间中存储许多时间戳。所以尺寸效率对我的情况更重要。计算(确定当前时间戳大于另一个或3个,在自定义设计液晶显示器上显示当前时间戳)通常每秒进行一次。
答案 0 :(得分:6)
我需要代表下一个最低10年的第二个决议
如果您使用uint32_t
,那么在2038年之前这些时间戳会很好。如果您需要,可以使用localtime
,gmtime
等将其转换为struct tm
,并提取日期,月份等。
答案 1 :(得分:2)
这取决于您想要对所述时间戳做什么以及它来自何处。
通常在嵌入式情况下,系统会有一个RTC(实时时钟),你有一个吗?或者您是否使用处理器时钟或1Hz定时器跟踪时间?如果你有RTC,我会倾向于使用时钟格式并保存任何进一步的处理。
同样重要的是您是否需要在本地处理此时间戳?如果您需要在微型本身上使用它,那么以类似于您需要的格式保存它将有明显的好处。例如,如果您需要在屏幕上显示日期,请使用与已经链接的answer类似的打包格式保存日期。
一般来说,虽然对于我已经建议的大多数嵌入式工作,使用32位无符号整数代表你选择的任何纪元的秒数是最好的。如果你必须比较值,这是一个很好的选择,因为它是简单的算术比较。
根据BCD十进制,有很多关于转换出example的BCD的问题,而这个问题最初是C#,答案应该在C中几乎相同。
答案 2 :(得分:2)
由于π秒是一个纳米世纪(或3100万秒是一年),你需要能够代表高达3.2×10 8 的值来存储长达10年的价值数据。因此,您需要至少29位来存储这些值,这使得32位数字成为明显的选择。您需要考虑如何定义您的纪元 - 时间0的开始日期。但是32位有符号数可以存储长达68年的秒数(想想Unix; {{1}的32位有符号值}支持范围1970-2037),这是范围很广。
答案 3 :(得分:1)
一天有86,400秒。
暂时忽略闰年(一共闰秒),一年有31,536,000秒。
这在10年内达到315,360,000。
添加可能在10年内发生的三个闰日,您将得到:315,619,200
这个数字需要29位来表示,所以你不妨使用32位表示。
答案 4 :(得分:0)
我会使用无符号32位。编写一个例程,将当前日期/时间转换为自开始时间以来的秒数,并将一秒转换为日期/时间。
每个设备可以将0作为输入设备的第一个日期/时间。然后,无论何时输入或输出日期/时间,都使用正确的功能进行按摩。自设置日期/时间以来,用户始终不知道内部值存储为秒。