首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式系统时钟

嵌入式系统时钟
EN

Stack Overflow用户
提问于 2012-12-02 05:22:01
回答 2查看 927关注 0票数 1

我正在开发一个项目,在那里我需要支持ms粒度的日历+时钟。我设法配置了芯片的RTC来帮助我计时,但我很难找到正确的数据类型来表示时间。

我一直使用time_t ( Unix时代),但是它是以秒为单位的,所以它不能工作。那struct timeval呢?在表示上下文(asctime)中,似乎不支持此结构作为struct tm

在嵌入式系统中表示时间的首选方式是什么?

注意:这个系统连接了一个基于java的后端服务器,需要与之同步时间,所以我正在寻找一种可以在几种语言中开箱即用的结构。

EN

回答 2

Stack Overflow用户

发布于 2012-12-02 05:51:38

您对毫秒粒度的需求以及与基于Java的东西进行交互的需求都表明,从epoch开始的64位时间将是一个合适且直接的选择。

今天的大多数编译器都有64位类型;如果没有,您可以将其作为两个32位类型的结构来处理,并按本地字节序适当的顺序放入代码来处理进位。

票数 1
EN

Stack Overflow用户

发布于 2012-12-05 18:41:03

有毫秒和毫秒,一个很容易,另一个很难。

我们运行一个1ms的硬件定时器中断循环来处理必须在实心光栅上操作的东西(例如电机控制)。我们从这个例程中增加一个全局32位的"ticks“值,然后可以用它来对需要以亚秒级间隔发生的事件进行计时(EG每50ms轮询一次)。

这不同于使用微的硬件计时器作为计时参考,在这样的系统中,任何东西的准确性都存在问题-从时钟晶体的精度到所有各种预分频器的精度,中断延迟等。现在,我们并不关心我们的电机控制例程每秒运行999次还是每秒1001次,或者如果我们每49.5ms而不是50毫秒轮询一次引脚的状态,因为它足够接近,重要的是它是及时发生的。在24小时的过程中,我们很可能会得到比一天中的毫秒更多的“滴答声”,这将是一个可怕的手表。

例如,时钟预分频器是计数到N然后复位,还是n-1然后复位?它是立即重置还是需要一个时钟周期?在micros中,这种细节会让人在时间上感到头疼。

我会使用RTC作为一天中的时间基准,然后可能会使ms计数器与秒数同步(每1 1Hz中断将"ticks“重置为0),这意味着您的m值相对于RTC只会有很小的偏差。您甚至可以直接读取RTC的输入时钟寄存器,以提取运行RTC的更快的时钟(通常为32.768 the时钟)。我们这样做是为了从1 1kHz定时器的预分频器时钟寄存器中获得微秒值。它并不完美,我们不会用它来计时,只用它来捕捉亚毫秒级的事件。

或者,看看你的应用程序是否真的需要ms,或者你是否可以在100ms内编造一个数字,并报告说,JS并不是原子钟级别的计时明智的-它甚至不是米老鼠级别的手表级别。如果你真的需要这种准确性,那你就错了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13663871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档