summaryrefslogtreecommitdiff
path: root/documentation/6.components/device-driver/clock_time/clock_boottime_zh.md
blob: d0a577bf2cbd02e1d899aa11dfb472dca3f86974 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# Clock Boottime 辅助

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

# API

```c
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

```c
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

```c
rt_err_t rt_clock_boottime_get_s(time_t *t);
```

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

## rt_clock_boottime_get_ns

```c
rt_err_t rt_clock_boottime_get_ns(struct timespec *ts);
```

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

# 示例

```c
#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 决定。