HRTOS Time Core

系统节拍(Tick System)

Tick System是HRTOS时间驱动核心,用于提供统一时间基准, 支撑调度、延时、时间片与系统运行计数。

Tick Timer ISR Time Base

概述

Tick System由硬件定时器驱动,是RTOS时间体系的最底层来源。

在HRTOS中,系统时间并非“自然流动”,而是由固定周期Tick驱动推进, 所有延时、调度、定时器均依赖该机制。

Tick频率决定系统时间精度与中断开销之间的平衡,是实时系统核心参数之一。

工作原理

每次硬件定时器中断触发,系统进入Tick ISR进行时间推进。

Tick ISR必须短小高效,否则会影响调度实时性。

ISR执行流程:递增系统tick → 更新延时队列 → 更新时间片 → 检查调度条件。

延时队列与时间片共享同一Tick基准,实现统一时间驱动模型。

Tick计数器可为16/32/64位,用于不同系统规模与运行周期需求。

关键接口 / 硬件层

extern char os_tick_config(u8 slice_count, u16 tick_value); extern void os_tick_get(u16 *high,u16 *low); extern u32 os_uptime_ms(); extern void os_delay(u16 tick); extern void os_delay_ms(unsigned char ms); extern u16 os_ms_to_tick(u16 ms); extern u16 os_sec_to_tick(u8 sec); /* Tick配置逻辑(关键实现) */

os_tick_config(slice_count, tick_value):配置系统Tick周期与时间片。 slice_count表示时间片数量,tick_value为硬件计数周期。

其内部实现会重置计数器并配置定时器: 将tick_value转换为定时器重装值(65535 - tick_value + 1), 并写入T0寄存器。

os_tick_get()用于读取当前系统tick(高低字节)。

os_uptime_ms()返回系统启动后的运行时间。

os_ms_to_tick / os_sec_to_tick用于时间单位转换。

运行流程

Timer Interrupt → Tick ISR → Tick++ → Delay Check → Timeslice Update → Scheduler Trigger

Tick驱动调度器运行,是整个RTOS的时间心跳。

当Tick到达时,系统检查延时队列是否有任务到期, 同时更新当前任务时间片。

若时间片耗尽或高优先级任务就绪,则触发调度切换。

实现说明(核心逻辑)

char os_tick_config(u8 slice_count, u16 tick_value) { if(tick_value == 0) return -1; OS_TICK_COUNT_H = 0; OS_TICK_COUNT_L = 0; OS_TIME_ONCE = slice_count; tick_value = 65535 - tick_value + 1; if(tick_value <= 1000) return -1; OS_T0_TH0 = tick_value >> 8; OS_T0_TL0 = tick_value & 0xff; return 0; }

Tick配置函数用于初始化硬件定时器与时间片系统, 是整个时间系统启动的关键入口。

错误条件包括tick_value为0或过小,避免中断频率异常。