HRTOS / TIME SUBSYSTEM

调度节拍 Scheduler Tick

调度节拍关注系统时间推进与任务调度之间的联系。 通过理解 Tick 中断、等待计时、任务状态更新和调度触发的职责边界, 可以更准确地分析 HRTOS 的时间管理与任务执行过程。

System Tick Time Management Task Scheduling 8051 Kernel
01

机制概述

系统时间推进与任务调度并不是同一个概念。

系统 Tick 为内核提供周期性的时间推进依据。 在具体实现中,Tick 相关处理可以与任务等待计时、超时检查、 时间片管理及调度触发等机制发生联系。

需要区分的是:时间基准、任务状态更新、调度请求和实际上下文切换 属于不同层次。一次 Tick 到来,并不意味着每次都会发生任务切换。

阅读重点: 本页介绍调度节拍涉及的机制和接口。具体中断路径、时间片更新条件及调度触发方式, 应以 HRTOS 当前内核实现为准。
02

工作机制

从周期性中断到可能发生的调度处理。

STEP 01

Tick 中断

硬件定时器按照配置产生周期性中断。

STEP 02

时间推进

执行相应的系统时间计数与时间管理处理。

STEP 03

状态检查

根据内核规则处理等待计时和满足条件的任务。

STEP 04

调度处理

符合相应触发条件时,进入后续调度流程。

关于时间片: 时间片轮转依赖调度器的时间片管理规则。不能仅凭存在周期性 Tick, 就推断每次 Tick 都会递减时间片或切换到另一个任务。

对于任务延时,重点是等待条件何时满足以及任务状态如何更新; 对于调度处理,重点则是何时需要重新选择任务,以及内核通过什么路径完成切换。

03

关键接口

系统 Tick 配置、时间读取与延时相关 API。

Time API Reference HRTOS / C51
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(void); 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 相关参数,包括时间片配置参数与定时器周期参数。
os_tick_get() 读取系统 Tick 计数的高、低 16 位。
os_uptime_ms() 获取以毫秒表示的系统运行时间。
os_ms_to_tick() 将毫秒数转换为 Tick 数量。
os_sec_to_tick() 将秒数转换为 Tick 数量。
os_delay() 任务级 Tick 延时接口。
os_delay_ms() 毫秒参数的忙等待延时;等待期间持续占用 CPU,不通过任务阻塞机制主动让出处理器。
使用注意: os_delay_ms() 属于忙等待,与任务级延时有本质区别。 不应将它当作能够阻塞当前任务并让其他任务运行的延时接口。
04

Tick 配置与时间参数

配置参数决定系统节拍的实际运行行为。

os_tick_config(u8 slice_count, u16 tick_value) 用于配置 HRTOS 的 Tick 相关参数。配置时应结合目标芯片、 定时器时钟、内核时间单位及时间片策略理解各参数的含义。

Timer Reload Calculation PARAMETER NOTE
// 原文档所述的重装值换算形式 reload = 65535 - tick_value + 1 // 结果写入的寄存器 OS_T0_TH0 OS_T0_TL0
参数说明: 上述公式按原文档提供的描述保留。实际使用时,应核对 os_tick_config() 的实现、参数取值范围、定时器工作模式与目标芯片的数据手册, 确认计算结果和寄存器配置相匹配。

初始化顺序、定时器启动时机及参数合法性检查也应以当前内核实现为准, 不宜仅根据接口名称推断内部执行顺序。

05

运行流程与调度关系

将时间处理与上下文切换分开理解。

Conceptual Execution Flow LOGIC OVERVIEW
// 1. 时间基准 Hardware Timer └─ Tick Interrupt └─ System Time Update // 2. 时间相关处理 ├─ Waiting-Time Processing ├─ Timeout / Wake-up Conditions └─ Task-State Update // 3. 调度相关处理 └─ Scheduling Trigger └─ Scheduler / Context Switch // 是否发生及如何执行,取决于具体条件

如果等待任务达到唤醒条件,内核可以按照相应规则更新任务状态; 任务进入就绪状态之后,是否立即执行,还取决于调度策略、当前执行上下文及相关触发条件。

因此,分析实时响应时间时,应分别关注 Tick 中断处理耗时、 调度触发路径、上下文切换开销以及高优先级任务对执行时机的影响。

06

设计与实时性注意事项

时间精度、处理开销和响应延迟需要共同考虑。

中断处理开销

Tick 相关中断处理应尽可能精简,避免在中断路径中引入不必要的长耗时操作。

时间分辨率

Tick 周期决定基于 Tick 的时间管理粒度之一,但不等于整个系统的实际响应延迟。

时间片策略

时间片轮转行为取决于调度器的具体实现,需结合优先级策略和时间片配置分析。

精度与开销

提高 Tick 频率通常会增加单位时间内的中断处理次数,应结合应用需求评估。

关于 Tickless: Tickless 是一种可选的低功耗时间管理设计,并非所有 RTOS 都默认支持。 本页不将其描述为 HRTOS 已实现的功能;如需介绍,应以实际代码和目标平台支持情况为依据。