clock_boottime_zh.md 2.0 KB

Clock Boottime 辅助

boottime 辅助函数将 clock_time 的单调计数转换为常见时间格式,返回值表示 “系统启动以来的时间”,不受 RTC 或墙上时间设置影响。

API

rt_err_t rt_clock_boottime_get_us(struct timeval *tv);
rt_err_t rt_clock_boottime_get_s(time_t *t);
rt_err_t rt_clock_boottime_get_ns(struct timespec *ts);

成功返回 RT_EOK;若时钟源不可用则返回 -RT_ERROR。返回值单调递增,适合用于 测量耗时。

rt_clock_boottime_get_us

rt_err_t rt_clock_boottime_get_us(struct timeval *tv);
  • 作用:获取启动以来的时间,格式为秒 + 微秒。
  • 参数:tv 需为有效的 struct timeval 指针。
  • 返回值:
    • RT_EOK:成功写入 tv
    • -RT_ERROR:无有效时钟源或换算失败。
  • 说明:
    • tv_usec 由 clock_time 分辨率换算而来,不一定严格为 1 us 精度。

rt_clock_boottime_get_s

rt_err_t rt_clock_boottime_get_s(time_t *t);
  • 作用:获取启动以来的整秒数。
  • 参数:t 需为有效的 time_t 指针。
  • 返回值:
    • RT_EOK:成功写入 *t
    • -RT_ERROR:无有效时钟源或换算失败。
  • 说明:
    • 该接口仅返回秒,若需亚秒精度请使用其它接口。

rt_clock_boottime_get_ns

rt_err_t rt_clock_boottime_get_ns(struct timespec *ts);
  • 作用:获取启动以来的时间,格式为秒 + 纳秒。
  • 参数:ts 需为有效的 struct timespec 指针。
  • 返回值:
    • RT_EOK:成功写入 ts
    • -RT_ERROR:无有效时钟源或换算失败。
  • 说明:
    • tv_nsec 的精度取决于计数频率,不一定达到 1 ns。

示例

#include <drivers/clock_time.h>

static void demo_boottime(void)
{
    struct timespec ts;

    if (rt_clock_boottime_get_ns(&ts) == RT_EOK)
    {
        rt_kprintf("boottime: %ld.%09ld\n", (long)ts.tv_sec, ts.tv_nsec);
    }
}

注意事项

  • 软 RTC 会使用 boottime 作为稳定基准。
  • 未注册时钟源时,系统退化为 tick 计数,分辨率由 RT_TICK_PER_SECOND 决定。