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

标签 c++ c time embedded rtos

我有一个运行 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/

相关文章:

c++: 为什么使用 .open("a:

c++如何生成1到10 ^ 6之间的随机数?

c++ - 调用进程时程序停止运行

在编译时捕获编译器版本和处理器架构

android - 如何将自定义扩展名(时间)添加到 <message> 标签?

c++ - 多个代理类可以组成一个 STL 证明位 vector 吗?

c - 为什么 printf() 在这段代码中打印出来?

javascript - 如何有效地序列化 64 位 float 以便字节数组保留自然数字顺序?

python - 矩阵乘法的 CPU 时间

python - 我如何证明和分析代码的运行时间,是 O(n) 吗?