HRTOS Wait

等待状态模型(Wait State Model)

等待状态模型描述HRTOS任务进入阻塞、等待以及恢复运行的状态管理机制。 通过WAIT状态与统一等待类型,实现时间、资源和通信事件的统一处理。

概述

在HRTOS中,任务状态由OS_TCB.state维护, WAIT状态表示任务当前无法继续执行,需要等待某个条件满足。

WAIT不是独立任务类型,而是任务生命周期中的一种运行状态。 具体等待原因通过wait_type字段进一步描述。

状态定义(OS_TCB.state)

#define READY 0 // 就绪态 #define WAIT 1 // 等待态 #define RUNNING 2 // 运行态 #define SUSPEND 3 // 挂起态 #define DEAD 4 // 删除态 这些状态直接存储于: OS_TASK[id].state

HRTOS采用较少的任务状态, 复杂阻塞逻辑通过WAIT类型扩展,而不是增加大量任务状态。

等待类型模型(wait_type)

WAIT_NONE 无等待状态 WAIT_DELAY 时间延迟等待 WAIT_SEM 信号量等待 WAIT_MUTEX 互斥锁等待 WAIT_MSG_SEND 消息队列发送等待 WAIT_MSG_RECV 消息队列接收等待 WAIT_EVENT 事件等待 WAIT_MAILBOX 邮箱等待

wait_type描述任务为什么进入WAIT状态, 同一个任务同时只允许存在一种等待来源。

状态转换模型

RUNNING | | os_wait() ↓ WAIT | | wake_task() ↓ READY | | scheduler select ↓ RUNNING 超时: WAIT → READY 信号: WAIT → READY

所有状态转换均由调度器、Tick中断以及资源释放事件共同驱动。

等待状态管理机制

进入等待: OS_TASK[tid].wait_type = type OS_TASK[tid].wait_obj = obj OS_TASK[tid].wait_tick = tick OS_TASK[tid].state = WAIT 恢复运行: wait_type = WAIT_NONE wait_obj = OS_INVALID_ID wait_tick = 0 state = READY

任务等待上下文直接存储于TCB, 避免额外等待控制结构,提高8051环境下的资源利用率。

资源等待关系

OS_RESOURCE wait_mask bit0 -> task0 bit1 -> task1 ... bit15 -> task15

资源对象通过等待位图记录阻塞任务。 当资源满足条件时,内核调用wake_task解除等待状态。

运行流程

任务创建 ↓ READY ↓ RUNNING ↓ 等待资源 ↓ WAIT ↓ 资源满足 / 超时 ↓ READY ↓ RUNNING

HRTOS通过轻量状态模型结合统一WAIT机制, 实现完整任务阻塞和恢复流程。

设计特点

  • 任务状态保持简单,降低调度复杂度
  • 等待类型独立扩展,不增加状态数量
  • TCB直接保存等待上下文
  • 资源等待统一使用位图管理
  • 支持任务与ISR共同触发唤醒

HRTOS采用“状态最小化 + WAIT扩展”的设计思想, 使内核能够在8051有限资源环境下保持结构清晰和可维护性。