我有一个运行 RTOS、IAR 工具的嵌入式系统 (ARM 9263)。系统支持标准的 time() 函数,它会给我当前时间。我需要反向调用,即我需要设置时间 - 是否有“C”标准方法来执行此操作?我四处搜索,当然认为这很明显,但也许它取决于平台?我不确定为什么,因为 time() 不是 - 有什么想法吗?谢谢!
最佳答案
使用 IAR 工具集,可以使用 ARM\src\lib\time.c
中的示例覆盖一天中的时间 C 运行时 API (time()
)。默认例程总是返回 -1,表示 CRT 不知道现在几点。一旦您提供了您自己的 time()
实现,它将根据您的目标平台和/或 RTOS 从源获取时间,您可以通过更新任何时间来设置时间时间来源是。 IAR 可能已经为他们的 RTOS 做到了这一点——我还没有使用过 IAR 的 PowerPac RTOS。
IAR C/C++ 开发指南中概述了它如何适用于另一个 RTOS 或没有 RTOS 的系统的详细信息。
例如,在我使用 ST Micro STM32 微 Controller 的系统上,实时时钟 (RTC) 设置为每秒滴答一次,time()
库函数只是返回 RTC 中的值。设置新的日期/时间就是用新值设置 RTC。 RTC 的时间计数器设置为 Unix 纪元值(自 1970 年 1 月 1 日以来的秒数),这允许 time.h
中的其余库函数正常工作(直到 2035 年左右的某个时间)当 32 位溢出开始造成严重破坏时)。
IAR DLIB C 运行时库中的日历例程支持日期到 2035 年 12 月 31 日(我怀疑它们在 2038 年之前溢出,因为内部计算使用 1900 年 1 月 1 日的纪元)。如果您使用 Unic 纪元,其他 DLIB 例程或多或少就能正常工作 - 我不确定使用不同的纪元需要付出多大的努力。
关于c++ - 如何使用 C/C++ 设置系统时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1422433/