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

Jef*_*eff 3 c c++ embedded time rtos

我有一个运行RTOS,IAR工具的嵌入式系统(ARM 9263).系统支持标准的time()函数,它给出了当前时间.我需要反向调用,即我需要设置时间 - 是否有"C"标准方法来执行此操作?我用谷歌搜索过,肯定认为这很明显,但也许它取决于平台?我不知道为什么,因为时间()不是 - 任何想法?谢谢!

Mic*_*urr 5

使用IAR工具集,time()可以使用中的示例覆盖时间C运行时API()ARM\src\lib\time.c.默认例程总是返回-1,表示CRT不知道它的时间.一旦您提供了自己的实现time(),它将从依赖于您的tartget平台和/或RTOS的源获取时间,您可以通过更新任何时间源来设置时间.IAR可能已经为他们的RTOS做了这个 - 我还没有使用过IAR的PowerPac RTOS.

IAR C/C++开发指南中概述了其他RTOS或没有RTOS的系统的工作原理.

例如,在我使用ST Micro STM32微控制器的系统上,实时时钟(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例程或多或少只是工作 - 我不确定使用不同时期需要多大程度的努力.