Clock Time Subsystem
The clock_time subsystem provides a unified time base and event scheduling for
RT-Thread. It separates timekeeping (a monotonic counter) from event delivery
(a programmable timer interrupt) so platforms can combine different hardware
sources while the kernel sees consistent behavior.
Design Principles
- Monotonic time: time readings never go backward.
- Separation of roles: a clock source provides a counter, a clock event triggers
deadlines.
- Scaled integer conversion: counters are converted to nanoseconds with a
resolution scale factor, avoiding floating point.
- Graceful fallback: if a hardware event is unavailable, software timers keep
the system functional.
Building Blocks
- Clock source: provides a stable counter and its frequency.
- Clock event: can be programmed to fire at the next deadline.
- Clock timer adapter: exposes a general timer peripheral as a clock source or
event device.
- Clock hrtimer: software scheduler that orders high-resolution timeouts and
programs the next event.
- Clock boottime helpers: translate the monotonic counter into common time
formats for use by higher layers.
Time Flow
- Read path: counter -> scaled resolution -> nanoseconds.
- Timeout path: hrtimer queue -> next expiry -> program event -> interrupt ->
dispatch callbacks.
BSP Integration Guidance
- Provide a stable counter or a programmable timer. One device can serve both
roles.
- Select a default source and event device to enable accurate timekeeping and
efficient scheduling.
- Keep ISRs minimal; the core handles conversion and scheduling.
- POSIX time APIs are layered on top of this subsystem and reuse its monotonic
base.