SylixOS 时间管理

更新时间:
2024-05-13
下载文档

SylixOS 时间管理

系统时间

SylixOS 内部记录了自系统启动后所产生的时钟节拍(我们称作 TICK)计数,该计数即代表系统时间。时钟节拍以一个固定的频率产生。与此相关的重要函数有以下三个:

#include <SylixOS.h>
ULONG Lw_Time_GetFrequency(VOID);
ULONG Lw_Time_Get(VOID);
INT64 Lw_Time_Get64(VOID);

调用 Lw_Time_GetFrequency 函数可以获得 SylixOS 时钟节拍频率(每秒的时钟节拍次数),Lw_Time_Get 函数将返回 SylixOS 当前的时钟节拍计数,Lw_Time_Get64 函数返回更宽范围的时钟节拍计数。

下面的例子通过以上函数获取系统已经运行了多长时间。

#include <SylixOS.h>
int main (int argc,  char *argv[])
{
    ULONG     ulUsecPerTick;
    ULONG     ulMsecTotal;

    ulUsecPerTick = 1000000 / Lw_Time_GetFrequency();
    ulMsecTotal   = Lw_Time_Get () * ulUsecPerTick / 1000;

    fprintf(stdout, "system has run for %lu milliseconds.\n", ulMsecTotal);
    return  (0);
}

在实际应用中,我们习惯使用秒或毫秒等时间单位,而 SylixOS 中有许多 API 以时钟节拍为参数,因此系统提供了以下两个操作宏用于时钟节拍的转换:

#include <SylixOS.h>
ULONG  LW_MSECOND_TO_TICK_0(ULONG  ulMs);
ULONG  LW_MSECOND_TO_TICK_1(ULONG  ulMs);

LW_MSECOND_TO_TICK_0 将毫秒转换为时钟节拍数,不足一个时钟节拍的毫秒值被丢弃,LW_MSECOND_TO_TICK_1 将毫秒转换为时钟节拍数,不足一个时钟节拍的毫秒值当作一个时钟节拍处理。

RTC 时间

RTC 时间来自于一个独立于 CPU 时间的硬件设备,与系统时间最大的区别在于 RTC 时间在系统掉电后还能继续进行时间计数,因此可以认为它代表了真实的物理时间。

#include <SylixOS.h>
INT   Lw_Rtc_Set(time_t  time);
INT   Lw_Rtc_Get(time_t  *ptime);

函数 Lw_Rtc_Set 原型分析:

  • 此函数成功返回 0,失败返回-1 并设置错误号。
  • 参数 time 为需要设置的时间。

函数 Lw_Rtc_Get 原型分析:

  • 此函数成功返回 0,失败返回-1 并设置错误号。
  • 输出参数 ptime 为获取的 RTC 时间。

time_t 为 POSIX 定义的时间类型,更详细的信息见“POSIX时间管理”小节。

SylixOS 提供了 3 个 RTC 时间与系统时间同步的函数:

#include <SylixOS.h>
INT   Lw_Rtc_SysToRtc(VOID);
INT   Lw_Rtc_RtcToSys(VIOD);
INT   Lw_Rtc_RtcToRoot(VOID);

Lw_Rtc_SysToRtc 函数用于将系统时间同步到 RTC 时间,Lw_Rtc_RtcToSys 函数用于将 RTC 时间同步到系统时间,Lw_Rtc_RtcToRoot 函数用于将 RTC 时间同步到根文件系统时间。

注意:
系统在启动时会自动调用 Lw_Rtc_RtcToSys 和 Lw_Rtc_RtcToRoot 以保证两者时间是一致的。

文档内容是否对您有所帮助?
有帮助
没帮助