STM32移植FreeRTOS系列十五:任务状态查询API函数总结

1 FreeRTOS任务相关API函数介绍(熟悉)

函数

描述

uxTaskPriorityGet()

获取任务优先级

vTaskPrioritySet()

设置任务优先级

uxTaskGetNumberOfTasks()

获取系统中任务的数量

uxTaskGetSystemState()

获取所有任务状态信息

vTaskGetInfo()

获取指定单个的任务信息

xTaskGetCurrentTaskHandle()

获取当前任务的任务句柄

xTaskGetHandle()

根据任务名获取该任务的任务句柄

uxTaskGetStackHighWaterMark()

获取任务的任务栈历史剩余最小值

eTaskGetState()

获取任务状态

vTaskList()

以“表格”形式获取所有任务的信息

vTaskGetRunTimeStats()

获取任务的运行时间

UBaseType_t  uxTaskPriorityGet(  const TaskHandle_t xTask  )

此函数用于获取指定任务的任务优先级,使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1

形参

描述

       xTask

要查找的任务句柄,NULL代表任务自身

返回值

描述

整数

任务优先级数值

用法

UBaseType_t priority_num = 0;
priority_num = uxTaskPriorityGet( NULL );

void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )

此函数用于改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet  1

形参

描述

                     xTask

任务句柄,NULL代表任务自身

uxNewPriority

需要设置的任务优先级

 vTaskPrioritySet( task2_handler,4 );

UBaseType_t uxTaskGetNumberOfTasks( void )

此函数用于获取系统中任务的任务数量

返回值

描述

                      整型

系统中任务的数量         

UBaseType_t task_num = 0;  
task_num = uxTaskGetNumberOfTasks();
printf("任务数量:%ld\r\n",task_num);

UBaseType_t  uxTaskGetSystemState(   TaskStatus_t * const pxTaskStatusArray,

                                        const UBaseType_t uxArraySize,

                                        configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime  )

此函数用于获取系统中所有任务的任务状态信息,使用该函数需将configUSE_TRACE_FACILITY 1

形参

描述

xTaskStatusArray

指向TaskStatus_t 结构体数组首地址

uxArraySize

接收信息的数组大小

pulTotalRunTime

系统总运行时间,为NULL 则省略总运行时间值

返回值

描述

             整型

获取信息的任务数量

typedef struct xTASK_STATUS
{
    TaskHandle_t 			xHandle;                       		/* 任务句柄 */ 
    const char *		 	pcTaskName;                     	/* 任务名 */ 
    UBaseType_t			    xTaskNumber;                     	/* 任务编号 */ 
    eTaskState e			CurrentState;                    	/* 任务状态 */ 
    UBaseType_t 			uxCurrentPriority;               	/* 任务优先级*/ 
    UBaseType_t 			uxBasePriority;                 	/* 任务原始优级*/ 
    configRUN_TIME_COUNTER_TYPE 	ulRunTimeCounter; 		  /* 任务运行时间*/
    StackType_t * 			pxStackBase;                    	/* 任务栈基地址 */ 
    configSTACK_DEPTH_TYPE 	usStackHighWaterMark;  	/* 任务栈历史剩余最小值 */ 
} TaskStatus_t;
TaskStatus_t * status_array = 0;
UBaseType_t task_num2 = 0;
uint8_t i = 0;
status_array = mymalloc(SRAMIN,(sizeof(TaskStatus_t) * task_num));
task_num2 = uxTaskGetSystemState( status_array,task_num,NULL);
printf("任务名\t\t任务优先级\t任务编号\r\n");
for(i = 0; i < task_num2; i++)
{
    printf("%s\t\t%ld\t%ld\r\n",
            status_array[i].pcTaskName,
            status_array[i].uxCurrentPriority,
            status_array[i].xTaskNumber);
}
    

(2条消息) 关于C语言中.与->的区别详解_->和._One day️的博客-CSDN博客

void vTaskGetInfo(   TaskHandle_t   xTask,
            
TaskStatus_t *   pxTaskStatus,
            
BaseType_t   xGetFreeStackSpace,
            
eTaskState   eState  ) 

此函数用于获取指定的单个任务的状态信息,使用该函数需将宏 configUSE_TRACE_FACILITY  1

形参

描述

xTask

指定获取信息的任务的句柄

pxTaskStatus

接收任务信息的变量

xGetFreeStackSpace

任务栈历史剩余最小值,

当为“pdFALSE 则跳过这个步骤,

当为“pdTRUE”则检查历史剩余最小堆栈

eState

任务状态,可直接赋值,如想获取代入“eInvalid

typedef enum
{   
	eRunning = 0,	/* 运行态 */ 
	eReady		/* 就绪态 */ 
	eBlocked, 		/* 阻塞态 */ 
	eSuspended, 	/* 挂起态 */ 
	eDeleted, 		/* 任务被删除 */ 
	eInvalid		/* 无效 */ 
} eTaskState;
    status_array2 = mymalloc(SRAMIN,sizeof(TaskStatus_t));
    vTaskGetInfo( task2_handler,status_array2,pdTRUE,eInvalid);
    printf("任务名:%s\r\n",status_array2->pcTaskName);
    printf("任务优先级:%ld\r\n",status_array2->uxCurrentPriority);
    printf("任务编号:%ld\r\n",status_array2->xTaskNumber);
    printf("任务状态:%d\r\n",status_array2->eCurrentState);

这里返回值为0代表运行态。返回值为1代表就绪态,以此类推。

TaskHandle_t    xTaskGetCurrentTaskHandle( void )

此函数用于获取当前任务的任务句柄, 使用该函数需将宏 INCLUDE_xTaskGetCurrentTaskHandle  1

返回值

描述

                      TaskHandle_t

当前任务的任务句柄

TaskHandle_t xTaskGetHandle(const char * pcNameToQuery);

此函数用于通过任务名获取任务句柄 , 使用该函数需将宏 INCLUDE_xTaskGetHandle 1

形参

描述

pcNameToQuery

                                             任务名

返回值

描述

    TaskHandle

                                 任务句柄

TaskHandle_t task_handle = 0;
task_handle = xTaskGetHandle( "task1" );
printf("任务句柄:%#x\r\n",(int)task_handle);
printf("task1的任务句柄:%#x\r\n",(int)task1_handler);

UBaseType_t    uxTaskGetStackHighWaterMark( TaskHandle_t  xTask )

此函数用于获取指定任务的任务栈历史最小剩余堆栈;

使用该函数需将宏 INCLUDE_uxTaskGetStackHighWaterMark 1

形参

描述

              xTask

                       任务句柄

返回值

描述

    UBaseType_t

                  任务栈的历史剩余最小值

UBaseType_t task_stack_min = 0;
task_stack_min = uxTaskGetStackHighWaterMark( task2_handler );
printf("task2历史剩余最小堆栈为%ld\r\n",task_stack_min);

eTaskState    eTaskGetState(TaskHandle_t xTask)

此函数用于查询某个任务的运行状态,使用此函数需将宏 INCLUDE_eTaskGetState 1

形参

描述

              xTask

        待获取状态任务的任务句柄

返回值

描述

     eTaskState

                                任务状态

typedef enum
{   
	eRunning = 0,	/* 运行态 */ 
	eReady		/* 就绪态 */ 
	eBlocked, 		/* 阻塞态 */ 
	eSuspended, 	/* 挂起态 */ 
	eDeleted, 		/* 任务被删除 */ 
	eInvalid		/* 无效 */ 
} eTaskState;
eTaskState state = 0;
state = eTaskGetState( task2_handler );
printf("当前task2的任务状态为:%d\r\n",state);
    

void   vTaskList(char * pcWriteBuffer)

此函数用于以“表格”的形式获取系统中任务的信息 ;

使用此函数需将宏 configUSE_TRACE_FACILITY configUSE_STATS_FORMATTING_FUNCTIONS 1

形参

描述

        pcWriteBuffer

        接收任务信息的缓存指针

Name      : 创建任务的时候给任务分配的名字。
State      : 任务的壮态信息, B 是阻塞态, R 是就绪态, S 是挂起态, D 是删除态
Priority  :任务优先级。
Stack      : 任务堆栈的“高水位线”,就是堆栈历史最小剩余大小。
Num      : 任务编号,这个编号是唯一的,当多个任务使用同一个任务名的时候可以通过此编号来做区分。

char InfoBuffer[100];				//保存信息的数组
//第四步:函数vTaskList()的使用	
printf("/*************第三步:函数vTaskList()的使用*************/\r\n");
vTaskList(InfoBuffer);							//获取所有任务的信息
printf("%s\r\n",InfoBuffer);					//通过串口打印所有任务的信息

链接:https://pan.baidu.com/s/1T2DwUe-qNYesRkVrwQPz8w?pwd=rtos 
提取码:rtos

猜你喜欢

转载自blog.csdn.net/qq_51519091/article/details/131703743