HRTOS Wait

等待超时机制(Wait Timeout)

等待超时机制用于限制任务等待时间, 当等待条件未满足但超过指定时间后, 内核自动恢复任务执行。

概述

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机制将阻塞、超时以及唤醒过程统一管理, 降低内核复杂度,提高长期维护性。