【发布时间】:2016-03-31 11:58:23
【问题描述】:
我正在开发 MCU,我的目标是在 MCU 上实现时间/日期。
我使用一个每秒计时的计时器并将其存储在uint32_t count 上,它的大小足以存储 136 年。我想以 2000 作为参考,最大值应为 2099。
这是我的数据结构:
typedef struct
{
uint8_t sec; // Seconds. [0-60] (1 leap second)
uint8_t min; // Minutes. [0-59]
uint8_t hour; // Hours. [0-23]
uint8_t day; // Day. [1-31]
uint8_t month; // Month. [0-11]
uint8_t year; // Year - from 2000. [00-99]
} osal_time_t;
使用最少的资源正确地将秒 (uint32_t count) 转换为分钟/小时/天/月/年的最佳方法是什么?
时间、小时和年份似乎很简单,但一天变得棘手,因为 28-29-30-31 天,而 2 月是每 4 年 29 天。
我看到了 linux 源代码实现,但我认为它是一个操作系统,而不是一个不起眼的 MCU。
谁能提示我应该在 MCU 中使用哪种算法,以便它需要最少。资源?
举个例子,这个http://www.mathcats.com/explore/elapsedtime.html是用什么算法计算的
如果你有任何代码sn-p,如果你能分享一下,我将不胜感激。
【问题讨论】:
-
我想指出的是,您可以在 ebay 上以几分钱的价格获得 RTC(实时时钟)模块,这些模块实现了非常简单的通信接口,并且通常有一个电池插槽可以保存它们即使 MCU 关闭,也可以使用数年。
-
不能只用time C库吗? tutorialspoint.com/c_standard_library/time_h.htm
-
闻起来像 X-Y 问题。为什么你需要将秒转换为时间+日期+年份,谁在乎呢?
-
@MatthewGoulart: 1) ebay 是专业产品的不良来源(我们不知道!) 2) 人们经常没有空间使用一些额外的硬件或重量是一个问题 3 ) 甚至一些“便士”对于大批量产品来说也是一个问题 4) 在软件中实现这一点是一个好习惯。
-
我不想解释所有的实现以及为什么,因为问题会太长并且相关信息太多。我知道 RTC,但我不能在我的应用程序中使用。我正在利用时间来安排一天中特定时间的活动。例如,用户可以安排系统在 2 月 27 日 4:30:27 执行的操作。由于闪存限制,我计划每月更新时间表。将 2 月 27 日... 转换为 2000 年的秒数的一种偏好,问题是一样的,用什么算法来计算经过的时间
标签: c date time microcontroller elapsedtime