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 以保证两者时间是一致的。