Delay vs Wait(延时与等待机制对比)
本页面用于对比 RTOS 中 delay(延时阻塞)与 wait(事件等待)两种调度行为的本质差异, 包括 CPU 释放方式、调度触发条件与实时性影响。
机制定义
delay = 时间驱动阻塞(time-based blocking)
wait = 事件驱动阻塞(event-based blocking)
wait = 事件驱动阻塞(event-based blocking)
Time Control Model = Tick Scheduling + Time Blocking + Event Blocking + Wake-up Dispatch
核心区别
Delay(延时)
任务主动进入阻塞状态,等待固定时间片结束后恢复执行。
Wait(等待)
任务等待某个事件(信号量 / 消息 / 条件)触发后恢复执行。
调度触发方式
delay 依赖系统 tick;wait 依赖事件唤醒。
实时性影响
wait 通常优于 delay(响应更快、CPU利用率更高)。
执行行为流程
Delay 流程
进入阻塞 → 加入时间队列 → Tick递减 → 时间到恢复
Wait 流程
进入阻塞 → 加入事件队列 → 事件触发 → 立即唤醒
演示代码
/* HRTOS Delay vs Wait Demo */
#include <HRTOS_KERNEL.H>
#include <HRTOS.H>
void task_delay(void)
{
while(1)
{
os_wait1(10); // delay行为:时间驱动阻塞
}
}
void task_wait(void)
{
while(1)
{
os_wait_event(1); // wait行为:事件驱动阻塞
}
}
void main(void)
{
os_scheduling(1);
os_task((unsigned int)task_delay, 0, 2, 0);
os_task((unsigned int)task_wait, 1, 3, 0);
os_task_release(0);
while(1)
{
os_nop();
}
}
API 接口: Time Control API
时间系统位置
Time Control is the root driver of RTOS scheduling, communication and synchronization.
系统意义
delay 适用于周期性控制任务,而 wait 更适用于事件驱动系统。 在 HRTOS 中,wait 被优先优化用于提升实时响应能力。
调度与时间关系
Scheduler decisions are triggered by time tick or event wake-up.