Files
Bernard Xiong 743b614875
Some checks failed
RT-Thread BSP Static Build Check / 🔍 Summary of Git Diff Changes (push) Has been cancelled
RT-Thread BSP Static Build Check / ${{ matrix.legs.RTT_BSP }} (push) Has been cancelled
RT-Thread BSP Static Build Check / collect-artifacts (push) Has been cancelled
doc_doxygen / doxygen_doc generate (push) Has been cancelled
doc_doxygen / deploy (push) Has been cancelled
pkgs_test / change (push) Has been cancelled
utest_auto_run / A9 :components/dfs.cfg (push) Has been cancelled
utest_auto_run / A9 :components/lwip.cfg (push) Has been cancelled
utest_auto_run / A9 :components/netdev.cfg (push) Has been cancelled
utest_auto_run / A9 :components/sal.cfg (push) Has been cancelled
utest_auto_run / A9 :cpp11/cpp11.cfg (push) Has been cancelled
utest_auto_run / AARCH64-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / A9-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / XUANTIE-rtsmart :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64 :default.cfg (push) Has been cancelled
utest_auto_run / AARCH64-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :default.cfg (push) Has been cancelled
utest_auto_run / A9-smp :default.cfg (push) Has been cancelled
utest_auto_run / RISCV :default.cfg (push) Has been cancelled
utest_auto_run / RISCV-smp :default.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / RISCV :kernel/atomic_c11.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/ipc.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/kernel_basic.cfg (push) Has been cancelled
utest_auto_run / A9 :kernel/mem.cfg (push) Has been cancelled
ToolsCI / Tools (push) Has been cancelled
Weekly CI Scheduler / Trigger and Monitor CIs (push) Has been cancelled
Weekly CI Scheduler / Create Discussion Report (push) Has been cancelled
[components][clock_time] Refactor time subsystem around clock_time (#11111)
* [components][clock_time] Refactor time subsystem around clock_time

Introduce the clock_time core with clock source/event separation, high-resolution scheduling, and boot-time helpers, plus clock_timer adapters for timer peripherals.

Remove legacy ktime/cputime/hwtimer implementations and migrate arch and BSP time paths to the new subsystem while keeping POSIX time integration functional.

Update drivers, Kconfig/SConscript wiring, documentation, and tests; add clock_time overview docs and align naming to clock_boottime/clock_hrtimer/clock_timer.

* [components][clock_time] Use BSP-provided clock timer frequency on riscv64

* [risc-v] Use runtime clock timer frequency for tick and delays

* [bsp] Add clock timer frequency hooks for riscv64 boards

* [bsp] Update Renesas RA driver doc clock_timer link

* [bsp] Sync zynqmp-r5-axu4ev rtconfig after config refresh

* [bsp][rk3500] Update rk3500 clock configuration

* [bsp][hpmicro] Add rt_hw_us_delay hook and update board delays

* [bsp][stm32l496-st-nucleo] enable clock_time for hwtimer sample in ci

* [bsp][hpmicro] Fix rtconfig include scope for hpm6750evk

Move rtconfig.h include outside the ENET_MULTIPLE_PORT guard for hpm6750evk and hpm6750evk2 so configuration macros are available regardless of ENET settings.

* [bsp][raspi3] select clock time for systimer

* [bsp][hpm5300evk] Trim trailing blank line

* [bsp][hpm5301evklite] Trim trailing blank line

* [bsp][hpm5e00evk] Trim trailing blank line

* [bsp][hpm6200evk] Trim trailing blank line

* [bsp][hpm6300evk] Trim trailing blank line

* [bsp][hpm6750evk] Trim trailing blank line

* [bsp][hpm6750evk2] Trim trailing blank line

* [bsp][hpm6750evkmini] Trim trailing blank line

* [bsp][hpm6800evk] Trim trailing blank line

* [bsp][hpm6e00evk] Trim trailing blank line

* [bsp][nxp] switch lpc178x to gcc and remove mcx timer source

* [bsp][stm32] fix the CONFIG_RT_USING_CLOCK_TIME issue.

* [docs][clock_time] add clock time documentation

* [docs][clock_time] Update clock time subsystem documentation

- Update device driver index to use correct page reference
- Clarify upper layer responsibilities in architecture overview
- Update README to describe POSIX/libc, Soft RTC, and device driver usage
- Refine architecture diagram with improved layout and color scheme
- Remove obsolete clock_timer.md file

* [kernel][utest] Trim trailing space

* [clock_time] Fix hrtimer wrap handling

* [clock_time] fix the static rt_inline issue

* [clock_time] fix the rt_clock_hrtimer_control result issue
2026-01-31 17:44:27 +08:00
..

@page page_device_clock_time Clock Time Subsystem

Overview

The clock_time subsystem provides a unified, high-resolution time base and programmable event scheduling for RT-Thread. It decouples a monotonic counter (clock source) from deadline delivery (clock event), so platforms can mix hardware counters and timers while the kernel and libc see consistent behavior.

Architecture

Clock time architecture

Layering and Responsibilities

  • Upper layers:
    • POSIX/libc time APIs (clock_gettime, nanosleep) use boottime and hrtimer APIs.
    • Soft RTC uses boottime as its monotonic time base for timekeeping.
    • Device drivers (input event timestamps, vDSO, PIC statistics) use boottime for timestamping.
  • clock_time subsystem: core APIs, clock source/event devices, the hrtimer scheduler, boottime helpers, and the clock_timer adapter.
  • Lower layers: BSP drivers provide hardware counters and timers, which are wrapped as clock_time devices or clock_timer devices.

Internal Components

  • Core API (clock_time_core.c)
    • Registers clock_time devices, manages default source/event selection, and provides counter <-> nanosecond conversion with fixed-point scaling.
  • Clock source device (rt_clock_time_device + RT_CLOCK_TIME_CAP_SOURCE)
    • Supplies a free-running counter and frequency for monotonic time reads.
  • Clock event device (rt_clock_time_device + RT_CLOCK_TIME_CAP_EVENT)
    • Programs the next deadline and calls rt_clock_time_event_isr() on expiry.
  • Clock hrtimer (clock_hrtimer.c)
    • Schedules high-resolution timeouts, programs the next event, and dispatches callbacks. Falls back to software timer when no hardware event is available.
  • Boottime helpers (clock_boottime.c)
    • Converts the monotonic counter into timeval/timespec/seconds for upper layers.
  • Clock timer adapter (clock_timer.c)
    • Exposes a unified hardware timer device (rt_clock_timer) and can register itself as a clock_time event device.
  • Architecture sources (arch/* and clock_time_arm_arch.c)
    • Provide fast CPU counters or architectural timers and register them as the default clock source when available.

Data Flow

  • Read path
    • Clock source counter -> scaled resolution -> nanoseconds -> boottime or clock_gettime.
  • Timeout path
    • HRTimer queue -> next expiry -> set_timeout on event device -> event ISR -> hrtimer processing -> callbacks.

Configuration

Enable the subsystem in menuconfig:

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

Optional settings:

  • CLOCK_TIMER_FREQ (RISC-V): base counter frequency used by the clock source.
  • RT_CLOCK_TIME_ARM_ARCH: enable ARM architected timer integration (DM/OFW).

BSP Integration Checklist

  • Provide a clock source:
    • Register a rt_clock_time_device with CAP_SOURCE, or use the provided architecture source (AArch64/RISC-V) via rt_clock_time_source_init().
  • Provide a clock event:
    • Register a rt_clock_time_device with CAP_EVENT and call rt_clock_time_event_isr() in its interrupt handler.
    • Or register a rt_clock_timer device; it can become the default event device automatically.
  • Keep event ISRs short; heavy work should run in thread context if needed.

Detailed Documents

  • @subpage page_device_clock_time_core
  • @subpage page_device_clock_hrtimer
  • @subpage page_device_clock_boottime
  • @subpage page_device_clock_timer