os_task_get_state
所属模块:任务管理 | 类型:任务状态查询函数
函数简介
os_task_get_state 用于查询指定任务当前运行状态。
支持多种任务状态判断,包括运行态、就绪态、挂起态、删除态以及最近一次被切出的任务状态。
同时支持普通任务与高速任务的统一状态映射,是调度器可观测性的核心接口之一。
函数原型
char os_task_get_state(unsigned char id);
参数说明
| 参数 |
说明 |
| id |
任务ID(0~OS_PROCESS_MAX+1) |
返回值
0:删除态
1:运行态
2:就绪态
3:挂起态
4:最近一次切出任务
-1:非法任务ID
源码实现
/*------------------------------------------------------------------------
| FILE DESCRIPTION |
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| - File name : task_get_state.c
| - Author : 谭舒
| - Update date : 2026-09-19
| - Copyright(C) : 2026 HRTOS. All rights reserved.
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
| INCLUDES |
------------------------------------------------------------------------*/
#include "hrtos_internal.h"
/*------------------------------------------------------------------------
| API FUNCTIONS |
------------------------------------------------------------------------*/
/**
* @brief 查询指定任务的当前状态。
*
* @param[in] id 任务编号。
*
* @return 任务状态。
* @retval 0 任务已删除或未创建。
* @retval 1 任务正在运行。
* @retval 2 任务处于就绪状态。
* @retval 3 任务处于挂起状态。
* @retval 4 任务为最近一次被切出的任务。
* @retval -1 任务编号无效。
*
* @note 对于标准任务,根据任务运行状态及当前任务、前一任务信息确定状态。
* 对于高速任务,根据任务运行状态及对应的高速任务运行标志确定状态。
* 当任务同时满足多个状态条件时,按照当前任务、前一任务及任务运行状态的优先级进行判断。
*/
char os_task_get_state(unsigned char id)//任务状态查询:0删除 1运行 2就绪 3挂起 4 = 最近一次被切出的任务
{
u8 I,J;
if(id>OS_PROCESS_MAX+1)
{
return -1;
}
if(id < OS_PROCESS_MAX)
{
if(OS_PROCESS_OK[id]==0)
{
I=0;
goto OS_AAAA1;
}
else if(id==OS_CURRENT_TASK)
{
I=1;
goto OS_AAAA1;
}
else if(id==OS_PREV_TASK)
{
I=4;
goto OS_AAAA1;
}
else if(OS_PROCESS_OK[id]&0x01)
{
I=2;
goto OS_AAAA1;
}
else
{
I=3;
goto OS_AAAA1;
}
}
else
{
if(id==OS_CURRENT_TASK)
{
I=1;
goto OS_AAAA1;
}
else if(id==OS_PREV_TASK)
{
I=4;
goto OS_AAAA1;
}
else
{
J=id-OS_PROCESS_MAX;
if(OS_SP_KUAI_BEI[J]==0)
{
I=0;
goto OS_AAAA1;
}
if(J==0)
{
if(OS_KUAI_PROCESS_A)
{
I=2;
}
else
{
I=3;
}
}
else
{
if(OS_KUAI_PROCESS_B)
{
I=2;
}
else
{
I=3;
}
}
goto OS_AAAA1;
}
}
OS_AAAA1:
return I;
}
/*------------------------------------------------------------------------
| END OF FILE: task_get_state.c |
------------------------------------------------------------------------*/
使用示例
void debug_state()
{
char state;
state = os_task_get_state(2);
// 用于调度器状态分析
}
注意事项
该函数直接反映调度器内部状态,返回值依赖当前任务切换时序。
高速任务与普通任务的状态判断逻辑不同,需注意区分。