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 数组存储任务状态信息:

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) { // 任务可调度 } }

典型使用场景

注意事项

函数内部已关闭中断,不建议在高频中断中频繁调用。
返回值仅表示当前状态,实际调度行为仍由调度器决定。

相关推荐