os_task_state
所属模块:任务管理 | 类型:状态查询函数
函数简介
os_task_state 用于获取指定任务的当前状态,是 HRTOS 任务管理与调度分析的重要接口。
通过该函数,开发者可以实时判断任务是否正在运行、是否处于就绪状态、
是否被阻塞或尚未创建,从而实现更精细的任务控制逻辑。
函数原型
char os_task_state(unsigned char id);
任务状态定义
#define OS_TASK_NONE 0 // 未创建
#define OS_TASK_RUNNING 1 // 运行中
#define OS_TASK_READY 2 // 就绪
#define OS_TASK_BLOCKED 3 // 阻塞
#define OS_TASK_PREV 4 // 上一个任务
HRTOS 通过状态码标识任务的生命周期阶段,是调度器决策的重要依据。
返回值说明
| 返回值 | 含义 |
| 0 | 任务未创建 |
| 1 | 当前正在运行 |
| 2 | 就绪状态(可被调度) |
| 3 | 阻塞/挂起 |
| 4 | 上一个任务 |
| -1 | 参数错误 |
核心机制解析
1. 临界区保护
ie_backup = IE;
EA = 0;
函数在读取任务状态前关闭中断,防止调度过程中数据被修改,
保证读取结果的原子性。
2. 普通任务状态判断
系统通过 OS_PEOCESS_OK 数组存储任务状态信息:
- 值为0 → 未创建
- 最低位为1 → 就绪状态
- 当前运行任务 → RUNNING
3. 快速任务处理机制
快速任务使用独立结构(OS_SP_KUAI_BEI / 标志位)管理,
与普通任务分开处理,提高执行效率。
4. 上一个任务记录
系统通过 OS_QIAN_BIANHAO 标识上一个运行任务,
用于调度分析与调试。
任务状态流转说明
未创建
↓(创建任务)
就绪(READY)
↓(调度执行)
运行(RUNNING)
↓(时间片用尽 / 主动让出)
就绪(READY)
↓(os_task_hang)
阻塞(BLOCKED)
↓(os_task_ready)
就绪(READY)
↓(os_task_delete)
未创建
该状态流转描述了 HRTOS 中任务的完整生命周期,
各个 API 通过修改状态参与调度控制。
使用示例
void main()
{
char state = os_task_state(1);
if(state == OS_TASK_READY)
{
// 任务可调度
}
}
典型使用场景
- 任务调试与状态监控
- 任务调度策略优化
- 条件触发控制(状态机)
注意事项
函数内部已关闭中断,不建议在高频中断中频繁调用。
返回值仅表示当前状态,实际调度行为仍由调度器决定。