Closed. This question needs to be more focused. It is not currently accepting answers. Learn more
想改进这个问题吗?更新问题,使其只关注一个问题editing this post
三年前关闭。
我正在开发一个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月29日是每4年。
我看到了linux的源代码实现,但我认为它是设计一个操作系统,而不是最好的微控制器。
有谁能提示我在MCU中应该使用什么样的算法,以便它需要最少的资源吗?
例如,使用什么算法计算这个http://www.mathcats.com/explore/elapsedtime.html
如果你有任何代码片段,如果你能分享我将不胜感激。

最佳答案

你只需要做数学题,别无选择。您正在从基数2转换为基数10(基数60表示为基数10)。
同样的,对于月日的事情,你也必须要仔细研究,每月有一张表,上面有几天是用来处理闰年的。
做数学的另一个选择是改变你的计算方式,使用更多的内存,但计算量更少。基本上是BCD方法。当秒数从9滚动到10时,然后增加数十秒并将秒数设置为0。一直重复到现在。或者在中途相遇,超过59秒滚到零,并增加分钟…然后做10个基本的事情,把10和1秒分小时分开。如果你没有分界线,你可以用一张桌子。

关于c - 在MCU上执行时间/日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36332833/

10-11 21:47