概述
Delay使任务进入阻塞态,在Tick到期后恢复READY,不占用CPU资源。 用于替代忙等待,实现任务级时间控制。
系统以Tick为统一时间基准,通过延时队列管理所有等待任务,到期后统一唤醒。
支持两种模式:相对延时(N ticks)与绝对延时(until tick)。 前者用于周期任务,后者用于时间同步。
精度由Tick频率决定(1kHz~10kHz),频率越高精度越高,但中断开销增加。
工作原理
任务调用Delay后进入BLOCKED状态并加入延时队列。 Tick ISR周期性检查并触发唤醒。
延时队列按expire_tick排序,Tick中断检查队首任务是否到期。
到期后任务状态从 BLOCKED → READY,并可能触发抢占调度。
关键接口 / 结构
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
流程:Delay → 计算expire_tick → 入队 → BLOCKED → Tick递增 → 检查 → 唤醒 → READY → 调度。
相对延时用于周期任务,绝对延时用于时间同步任务。
ISR中不建议阻塞调用,系统提供安全路径处理延时逻辑。