FreeRTOS-任务信息查询

FreeRTOS-任务信息查询

  • FreeRTOS中提供了很多函数可以用来获取相应的任务信息,这里我们会深入分析vTaskGetInfo()、uxTaskGetSystemState()和vTaskList()这三个函数以及它们之间的一些联系。FreeRTOS中的任务信息查询函数列举如下:
函数名 描述
uxTaskPriorityGet() 获取某任务优先级
vTaskPrioritySet() 改变某任务优先级
uxTaskGetSystemState() 获取系统中所有任务状态信息
vTaskGetInfo() 获取某个任务信息
xTaskGetApplicationTaskTag() 获取某个任务的标签值
xTaskGetCurrentTaskHandle() 获取当前正在运行的任务的任务句柄
uxTaskGetStackHighWaterMark() 获取任务堆栈历史剩余最小值
eTaskGetState() 获取某任务状态
pcTaskGetName() 获取某任务名字
xTaskGetTickCount() 获取系统时间计数器值
xTaskGetTickCountFromISR() 在中断中获取时间计数器的值
xTaskGetSchedulerState() 获取任务调度器的状态
uxTaskGetNumberOfTask() 获取当前系统中存在的任务数量
vTaskList() 以表格形式输出当前系统中所有信息
vTaskGetRunTimeStats() 获取每个任务的运行时间
vTaskSetApplicationTaskTag() 设置任务标签值

vTaskGetInfo()

  • 该函数几乎能获取单个任务的所有信息。下面来看一下该函数的函数声明:
	void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, 
	                   BaseType_t xGetFreeStackSpace, eTaskState eState )
	
  • 该函数输入参数有四个,TaskHandle_t xTask为所要查询任务的任务句柄;TaskStatus_t *pxTaskStatus为任务状态结构体,用于存放任务的状态,该结构体需要用户自定义;BaseType_t xGetFreeStackSpace为是否计算任务剩余最小堆栈大小,传入参数pdTRUE表示计算,但需要耗费一些时间;eTaskState eState为是否获取任务状态,输入参数eInvalid时表示获取任务状态,但同样也会消耗一些时间,否则用户指定任务状态,不会消耗时间。下面深入分析一下该函数源码。
	void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t *pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState )
	{
   
   
	TCB_t *pxTCB;

		/* xTask is NULL then get the state of the calling task. */
		pxTCB = prvGetTCBFromHandle( xTask );------(1)

		pxTaskStatus->xHandle = ( TaskHandle_t ) pxTCB;------(2)
		pxTaskStatus->pcTaskName = ( const char * ) &( pxTCB->pcTaskName [ 0 ] );------(3)
		pxTaskStatus->uxCurrentPriority = pxTCB->uxPriority;------(4)
		pxTaskStatus->pxStackBase = pxTCB->pxStack;------(5)
		pxTaskStatus->xTaskNumber = pxTCB->uxTCBNumber;------(6)

		#if ( INCLUDE_vTaskSuspend == 1 ) ------(7)
		{
   
   
			/* If the task is in the suspended list then there is a chance it is
			actually just blocked indefinitely - so really it should be reported as
			being in the Blocked state. */
			if( pxTaskStatus->eCurrentState == eSuspended )
			{
   
   
				vTaskSuspendAll();
				{
   
   
					if( listLIST_ITEM_CONTAINER( &( pxTCB-</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值