os_task_get_state

所属模块:任务管理 | 类型:任务状态查询函数

API Metadata

函数ID:os_task_get_state
模块:task
类型:task state query
嵌套深度:1

函数简介

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); // 用于调度器状态分析 }

注意事项

该函数直接反映调度器内部状态,返回值依赖当前任务切换时序。 高速任务与普通任务的状态判断逻辑不同,需注意区分。

相关推荐