代码之家  ›  专栏  ›  技术社区  ›  Jeff

如何使用C/C++设置系统时间?

  •  3
  • Jeff  · 技术社区  · 15 年前

    我有一个运行RTOS、IAR工具的嵌入式系统(ARM9263)。系统支持标准时间()函数,给出当前时间。我需要反向调用,也就是说我需要设置时间-有没有一个“C”标准的方法来实现这一点?我在谷歌上搜索过,肯定认为这是显而易见的,但也许这取决于平台?我不知道为什么,因为时间()不是-有什么想法吗?谢谢!

    4 回复  |  直到 15 年前
        1
  •  5
  •   Michael Burr    15 年前

    使用IAR工具设置第C天运行时API的时间( time() )可以使用中的示例重写 ARM\src\lib\time.c .默认例程总是返回-1,这表示CRT不知道它是什么时间。一旦你提供了你自己的实现 时间() ,它将从依赖于您的Tartget平台和/或RTOS的源获取一天中的时间,您可以通过更新时间源来设置一天中的时间。IAR可能已经为他们的RTO做了这件事——我还没有使用IAR的PowerPacRTO。

    在IAR C/C++开发指南中概述了如何为另一个RTOS或没有RTOS的系统工作。

    例如,在我所研究的使用ST Micro STM32微控制器的系统上,实时时钟(rtc)设置为每秒滴答一次,并且 时间() library函数只返回rtc中的值。设置新的日期/时间是使用新值设置RTC的问题。RTC的时间计数器是用一个unix epoch值设置的(从1970年1月1日起的秒数),它允许从 time.h 工作得很好(到2035年左右的某个时候,32位溢出开始造成破坏)。

    IAR DLib C运行时库中的日历例程支持日期到2035-12-31(我怀疑它们在2038年之前溢出,因为内部计算使用1900年1月1日的epoch)。如果您使用unic epoch,其他dlib例程或多或少只是工作-我不确定使用不同的epoch需要多大程度的努力。

        2
  •  2
  •   nimrodm    15 年前

    settimeofday (2)它允许您这样做——但它是POSIX而不是ANSIC。

    你也可以查一下 clock_settime 可能更适用于嵌入式系统。 See this manpage, for example.

        3
  •  1
  •   Brian Neal    15 年前

    在C或C++中没有标准的方法来实现这一点。您必须向操作系统供应商寻求API和/或编译器或标准库供应商寻求某种扩展。

        4
  •  1
  •   Clifford    15 年前

    IAR工具不是针对特定目标的,因此库中没有任何工具知道如何设置时间。 你的 硬件(或为此阅读),这取决于您的板支持包(通常将硬件映射到标准库以及其他东西)。

    不是所有的目标都有一个RTC。IAR的工具确实为许多特定的微控制器和现成的开发板提供了支持,因此您可能会发现它已经为您完成了—您只需要查看一下。

    您的Micro可能有一个内部的RTC,或者您可能有一个外部的,但是“ARM 9263”本身并不定义一个RTC,所以您必须更具体一些-RTC通常作为供应商特定的外设添加。然后是获取部件的用户手册并编写必要的寄存器的情况。