README_zh.md 3.0 KB

Clock Time 子系统概述

clock_time 子系统为 RT-Thread 提供统一的高精度时间基准与事件调度能力。 它将单调计数(时钟源)与超时事件(时钟事件)解耦,使平台可以组合不同的 硬件计数器与定时器,同时为内核与 libc 提供一致的时间行为。

软件架构

Clock time architecture

分层关系与职责

  • 上层:
    • POSIX/libc 时间接口(clock_gettime、nanosleep)使用 boottime 和 hrtimer API。
    • 软 RTC 使用 boottime 作为单调时间基准进行计时。
    • 设备驱动(输入事件时间戳、vDSO、中断控制器统计)使用 boottime 获取时间戳。
  • clock_time 子系统:核心 API、时钟源/事件设备、高精度定时器调度器、 boottime 辅助函数、clock_timer 适配层。
  • 下层:BSP 驱动提供硬件计数器与定时器,并封装为 clock_time 设备或 clock_timer 设备。

内部组成

  • Core API(clock_time_core.c)
    • 负责设备注册、默认源/事件选择,以及计数 <-> 纳秒的缩放换算。
  • 时钟源设备(rt_clock_time_device + RT_CLOCK_TIME_CAP_SOURCE)
    • 提供自由运行计数器与频率,作为单调时间基准。
  • 时钟事件设备(rt_clock_time_device + RT_CLOCK_TIME_CAP_EVENT)
    • 负责下一次超时编程,并在到期时调用 rt_clock_time_event_isr()。
  • 高精度定时器(clock_hrtimer.c)
    • 维护超时队列、设置下一次事件并分发回调。没有硬件事件时退化为软件定时器。
  • Boottime 辅助(clock_boottime.c)
    • 将单调计数转换为 timeval/timespec/秒,供上层使用。
  • Clock timer 适配层(clock_timer.c)
    • 提供统一的硬件定时器设备(rt_clock_timer),并可注册为事件设备。
  • 架构源(arch/* 与 clock_time_arm_arch.c)
    • 提供 CPU 计数器或架构定时器,并在可用时设置为默认时钟源。

数据流

  • 读取路径
    • 时钟源计数 -> 缩放分辨率 -> 纳秒 -> boottime 或 clock_gettime。
  • 超时路径
    • hrtimer 队列 -> 下一到期 -> 事件设备 set_timeout -> 事件中断 -> hrtimer 处理 -> 回调分发。

配置选项

在 menuconfig 中启用:

RT-Thread Components ->
    Device Drivers ->
        [*] Clock time subsystem (RT_USING_CLOCK_TIME)

可选配置:

  • CLOCK_TIMER_FREQ(RISC-V):时钟源使用的基础计数频率。
  • RT_CLOCK_TIME_ARM_ARCH:启用 ARM 架构定时器集成(DM/OFW)。

BSP 集成要点

  • 提供时钟源:
    • 注册带 CAP_SOURCE 的 rt_clock_time_device,或使用 rt_clock_time_source_init() 提供的架构源。
  • 提供时钟事件:
    • 注册带 CAP_EVENT 的 rt_clock_time_device,并在中断中调用 rt_clock_time_event_isr()。
    • 或直接注册 rt_clock_timer 设备,自动成为默认事件设备。
  • 事件中断应保持简短,复杂处理建议转到线程上下文。

详细文档

  • clock_time_core.md
  • clock_hrtimer.md
  • clock_boottime.md
  • clock_timer.md