xTaskGetHandle
此函数根据任务名字获取的任务句柄,在使用函数xTaskCreate()或xTaskCreateStatic()创建任务的时候会给任务分配一个任务名,函数xTaskGetHandle()就是使用任务名字来查询其对应的任务句柄的.要使用此函数的话宏INCLUDE_xTaskGetHandle应该设置为1,此宏在FreeRTOS.h文件的194行
TaskHandle_t xTaskGetHandle( const char *pcNameToQuery )
参数;
pcNameToQuery :任务名,C语言字符串
返回值:
NULL:没有任务名pcNameToQuery所对应的任务
其他值:任务名pcNameToQuery所对应的任务句柄
vTaskGetInfo
此函数也是用来获取任务状态的,但是只能获取单个任务状态,任务的状态作息填充到pxTaskStatus,
使用此函数的话configUSE_TRACE_FACILITY要定义为1,此宏在FreeRTOSConfig.h文件的102行
void vTaskGetInfo( TaskHandle_t xTask, //要查找的任务的任务句柄
TaskStatus_t *pxTaskStatus, //指向类型为TaskStatus_t 的结构体变量
BaseType_t xGetFreeStackSpace, //TaskStatus_t 成员中有个usStackHighWaterMark ,
//设为pdFALSE来跳过这个步骤,pbTRUE就会去检查
eTaskState eState ) //结构体TaskStatus_t的成员eCurrentState就是这个eTaskState 类型的
typedef enum
{
eRunning = 0, //运行状态
eReady, //就绪态
eBlocked, //阻塞态
eSuspended, //挂起态
eDeleted, //任务被删除,任务控制块没有释放
eInvalid //无效
} eTaskState;
//第二步:函数vTaskGetInfo()的使用
TaskHandle_t TaskHandle;
TaskStatus_t TaskStatus;
printf("/***************第二步:函数vTaskGetInfo()的使用************/\r\n");
TaskHandle=xTaskGetHandle("led0_task"); //根据任务名获取任务句柄
//获取LED0_TASK的任务信息
vTaskGetInfo((TaskHandle_t)TaskHandle,//任务句柄
(TaskStatus_t*)&TaskStatus,//任务信息结构体
(BaseType_t)pdTRUE,//允许统计任务堆栈历史最小剩余大小
(eTaskState)eInvalid);//函数自己获取任务运行状态
//通过串口打印出指定任务的有关信息
printf("任务名: %s\r\n",TaskStatus.pcTaskName);
printf("任务编号: %d\r\n",(int)TaskStatus.xTaskNumber);
printf("任务状态: %d\r\n",TaskStatus.eCurrentState);
printf("任务当前优先级:%d\r\n",(int)TaskStatus.uxCurrentPriority);
printf("任务基础优先级:%d\r\n",(int)TaskStatus.uxBasePriority);
printf("任务堆栈基地址:%#x\r\n",(int)TaskStatus.pxStackBase);
printf("任务堆栈历史剩余最小值: %d\r\n",TaskStatus.usStackHighWaterMark);