概述
在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有限资源环境下保持结构清晰和可维护性。