Time Management · HRTOS

Timer 机制与超时控制

从系统 Tick 到任务等待状态,理解 HRTOS 如何组织延时与超时控制, 以及任务级等待机制和独立软件定时器之间的区别。

8051 RTOS Tick-driven Wait / Timeout Kernel Mechanism
01

概述:HRTOS 中的 Timer 是什么

在当前描述的 HRTOS 实现中,任务延时与等待超时主要依赖系统 Tick 和任务等待状态进行管理;不能因此把它等同于一套独立的软件定时器对象系统。

在常见 RTOS 设计中,“Timer”可能指向两类不同机制: 一类是让任务等待一段时间后恢复执行,另一类是到期后执行回调函数的 软件定时器对象。两者的用途与生命周期并不相同。

TASK WAIT

任务延时与等待超时

任务进入等待状态,由系统时间推进等待计数;满足唤醒条件后, 任务状态再按内核逻辑更新。

SOFTWARE TIMER

独立软件定时器对象

通常具有创建、启动、停止、周期配置或到期回调等管理接口。 是否具备这些能力,需要以具体内核实现为准。

理解边界

本页讨论的是 HRTOS 的 Tick 驱动等待与超时机制,不把通用 RTOS 中常见的 timer 对象、回调队列或动态创建接口当作 HRTOS 已有功能。

02

核心机制:Tick 如何参与等待管理

系统 Tick 为时间相关操作提供离散的时间推进事件。对于采用等待计数的任务, 内核需要根据等待状态、剩余计数及具体等待类型,判断是否满足超时或唤醒条件。

Tick 事件 系统时间推进
等待状态检查 检查计数与等待条件
状态更新 按内核规则处理超时与就绪状态
实现说明

上图是等待机制的概念流程,不是对内核源码逐行还原。 实际处理顺序、参与检查的任务范围,以及超时标志和调度触发的具体时机, 应以对应版本的 HRTOS 内核实现为准。

为什么需要等待状态

任务等待不仅仅是一个计数器。内核还需要知道任务当前处于什么状态、 等待的是什么条件,以及等待结束时应该如何处理。 因此,不能仅凭一个名为 wait_tick 的字段,就推断所有等待类型都采用完全相同的处理路径。

03

任务延时与超时的关系

任务延时可以理解为一种以时间为条件的等待:在指定时间尚未满足之前, 任务不应被当作普通就绪任务继续运行。超时控制则是更广泛的概念, 它可以用于描述等待操作在限定时间内未完成时的处理结果。

概念 关注点 需要区分的内容
任务延时 经过指定时间后恢复任务执行资格 延时期间任务是否处于等待状态
等待超时 等待条件是否在限定时间内得到满足 超时结果如何传递给调用方
软件定时器 到期后执行某种定时动作 是否存在独立对象、回调及启停接口

这些概念可以共享系统 Tick 作为时间基础,但在接口语义和内核实现上并不必然相同。 文档应根据具体 API 的行为描述它们,而不是仅凭名称将其合并。

04

等待计数与任务控制块

在采用任务等待计数的实现中,任务控制块通常需要保存等待相关信息, 例如剩余等待时间或等待状态。这些字段共同参与内核的状态转换, 但字段布局与具体类型应以实际 HRTOS 版本的定义为准。

Conceptual model · 示意结构,并非 HRTOS 完整源码
/* Conceptual model only */

typedef struct {
    /* Task state and wait metadata */
    /* Remaining wait ticks */
} TASK_WAIT_MODEL;

这里不直接给出一个看似完整的 OS_TCB 定义,避免把未经核对的字段顺序、数据类型或结构布局误认为内核正式接口。

阅读源码时建议核对

重点检查等待计数的定义、等待状态枚举、Tick 处理路径、超时标志的设置位置, 以及等待结束后任务如何重新进入调度流程。

05

快速任务与轻量计时路径

如果内核为快速任务维护独立的等待计数或触发标志,那么它可以形成区别于普通任务 等待管理的计时路径。是否存在独立计数数组、数组长度、具体触发条件及其与普通 Tick 处理的关系,需要通过对应版本的实现确认。

不要仅凭变量名推断时序保证

独立计数路径不自动意味着更短的中断延迟,也不代表所有快速任务都能获得固定响应时间。 实际响应还取决于中断屏蔽区间、执行路径、调度规则及目标芯片的运行条件。

06

机制边界与使用注意事项

Tick 分辨率不等于任务响应时间

Tick 决定时间管理所采用的离散推进粒度,但任务实际恢复运行的时刻还受到 调度策略、当前执行上下文以及更高优先级工作等因素影响。 不能简单地把 Tick 周期当成完整的任务响应时间上界。

不要把等待计数等同于通用定时器

一个等待计数可以支持任务延时或等待超时,却不意味着系统已经实现了独立的 软件定时器服务。如果应用需要到期回调、周期触发或独立启停管理, 应先确认 HRTOS 当前版本是否提供相应接口。

区分阻塞等待与忙等待

任务级延时和忙等待具有不同的执行语义。HRTOS 的 os_delay_ms() 是忙等待延时: 等待期间仍会占用 CPU 执行时间,不能将其描述为自动阻塞并交出 CPU 的任务级延时。使用时应根据精度需求和实时性影响选择合适机制。