概述
HRTOS中的等待操作均支持超时控制。 任务进入WAIT状态后,等待时间由TCB中的wait_tick字段维护。
超时机制同时适用于时间等待、同步等待以及通信等待。
等待超时并不表示资源成功获取,而是表示等待条件失败并返回。
等待时间管理
OS_TCB
{
u8 wait_type;
u8 wait_flag;
u8 wait_obj;
u16 wait_tick;
};
wait_tick:
当前等待剩余tick数量
任务调用os_wait()进入等待时, 内核保存目标等待时间。 系统Tick运行期间持续更新等待状态。
超时判断流程
任务进入WAIT
↓
保存wait_tick
↓
系统Tick递减
↓
wait_tick == 0
↓
调用wake_task()
↓
WAIT_TIMEOUT
↓
任务READY
超时处理最终通过统一唤醒函数完成, 避免不同等待对象拥有不同恢复逻辑。
等待结果返回
#define WAIT_TIMEOUT 1
#define WAIT_SIGNAL 2
WAIT_TIMEOUT
条件未满足
等待时间结束
WAIT_SIGNAL
资源满足
事件触发唤醒
任务恢复运行后, 通过wait_flag判断此次等待结束原因。
关键接口
u8 os_wait(
u8 type,
u8 obj,
u16 tick
);
void wake_task(
u8 tid,
u8 flag
);
os_wait负责进入等待状态, wake_task负责解除等待并恢复任务。
运行流程
调用等待API
↓
os_wait()
↓
任务进入WAIT
↓
等待资源 / 时间
↓
-----------------
资源满足
↓
WAIT_SIGNAL
或者
时间结束
↓
WAIT_TIMEOUT
-----------------
↓
READY
↓
调度运行
设计特点
- 统一等待超时处理
- TCB保存等待时间上下文
- 支持资源等待与时间等待结合
- 超时和事件唤醒使用同一恢复路径
- 适合低资源8051实时系统
HRTOS通过WAIT机制将阻塞、超时以及唤醒过程统一管理, 降低内核复杂度,提高长期维护性。