HRTOS Documentation

调度节拍(Scheduler Tick)

调度节拍是RTOS的时间驱动核心,通过硬件定时器周期性中断, 推动任务调度、延时更新与系统时间递增。

Time Tick Scheduler

概述

Scheduler Tick由硬件定时器周期触发,是系统时间的唯一来源。 它驱动延时队列更新、时间片递减与调度决策。

没有Tick,系统无法进行时间推进,也无法实现Delay与时间片轮转调度。

Tick频率决定系统精度与开销的平衡(1kHz~10kHz典型范围)。

工作原理

每次Tick中断触发时,系统递增全局tick计数器, 并依次执行延时队列检查、时间片更新与调度触发。

Tick ISR必须短小高效,避免影响实时性。

延时队列按expire_tick排序,到期任务从BLOCKED切换到READY。

时间片递减用于Round Robin调度,同优先级任务公平切换。

关键接口 / 结构

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 u16 os_ms_to_tick(u16 ms); extern u16 os_sec_to_tick(u8 sec); extern void os_delay(u16 tick); extern void os_delay_ms(unsigned char ms);

os_tick_config:初始化系统Tick,配置时间片数量与硬件定时器周期。

tick_value 会转换为 (65535 - tick_value + 1) 并写入定时器寄存器 OS_T0_TH0 / OS_T0_TL0。

初始化流程:清零tick计数 → 设置时间片 → 配置定时器 → 启动系统节拍。

os_tick_get:读取当前系统tick(高16位+低16位)。

os_uptime_ms:返回系统运行时间(毫秒)。

os_ms_to_tick:毫秒转换为tick。

os_sec_to_tick:秒转换为tick。

os_delay:tick级任务阻塞延时。

os_delay_ms:忙等待延时(不参与调度)。

运行流程

Timer Interrupt → Tick++ → Delay Check → TimeSlice Update → Scheduler

Tick中断统一驱动系统时间与任务状态变化。

到期任务唤醒后进入READY队列,由调度器选择执行。

扩展说明

Tickless模式可在空闲时关闭周期中断以降低功耗。

Tick频率越高精度越高,但ISR开销也增加,需要权衡设计。

  • 职责:系统时间基准
  • 机制:硬件定时器 + ISR
  • 驱动:Delay / Scheduler / Timer
  • 优化:Tickless / 低开销ISR