HRTOS Documentation

任务延时(Delay)

Delay用于将任务挂起指定Tick时间,由系统Tick驱动自动唤醒, 是RTOS时间管理与调度的基础机制。

Time Delay Scheduling

概述

Delay使任务进入阻塞态,在Tick到期后恢复READY,不占用CPU资源。 用于替代忙等待,实现任务级时间控制。

系统以Tick为统一时间基准,通过延时队列管理所有等待任务,到期后统一唤醒。

支持两种模式:相对延时(N ticks)与绝对延时(until tick)。 前者用于周期任务,后者用于时间同步。

精度由Tick频率决定(1kHz~10kHz),频率越高精度越高,但中断开销增加。

工作原理

任务调用Delay后进入BLOCKED状态并加入延时队列。 Tick ISR周期性检查并触发唤醒。

Delay期间任务不参与调度,CPU用于其他READY任务执行。

延时队列按expire_tick排序,Tick中断检查队首任务是否到期。

到期后任务状态从 BLOCKED → READY,并可能触发抢占调度。

关键接口 / 结构

os_delay(u16 tick) os_delay_ms(u8 ms) os_ms_to_tick(u16 ms) os_sec_to_tick(u8 sec) os_tick_config(u8 slice_count, u16 tick_value) os_tick_get(u16 *high, u16 *low) os_uptime_ms() /* Tick 延时 / 时间转换 / 系统时间接口 */

os_delay:基于 tick 的任务延时,使任务进入阻塞态,由调度器在到期后唤醒。

os_delay_ms:忙等待延时函数,占用 CPU,不释放调度资源,仅用于短时硬件时序控制。

os_ms_to_tick:将毫秒转换为系统 tick,用于延时计算与时间换算。

os_sec_to_tick:将秒转换为 tick,用于较长周期任务控制。

os_tick_config:配置系统时钟节拍参数(时间片数量 + tick 长度)。

os_tick_get:获取当前系统 tick 计数(高低字节),用于时间基准读取。

os_uptime_ms:获取系统开机运行时间(毫秒)。

运行流程

RUNNING → BLOCKED → Delay Queue → Tick ISR → READY → Scheduler

Tick中断统一唤醒到期任务并触发调度。

流程:Delay → 计算expire_tick → 入队 → BLOCKED → Tick递增 → 检查 → 唤醒 → READY → 调度。

相对延时用于周期任务,绝对延时用于时间同步任务。

ISR中不建议阻塞调用,系统提供安全路径处理延时逻辑。