任务相关的API函数-uxTaskGetSystemState
uxTaskGetSystemState:此函数用于获取系统中所有的任务状态,每个任务的状态信息保存在一个TaskStatus_t类型的结构体里面.要使用此函数必须把 configUSE_TRACE_FACILITY 打开,在FreeRtos.h文件的744行(V9.0)
返回值:统计到任务状态的个数,也就是填写到数组pxTaskStatusArray中的个数,此值应该等于函数uxTaskGetNumberOfTask()的返回值,如果uxArraySize太小的话返回值可能为0
UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
const UBaseType_t uxArraySize,
uint32_t * const pulTotalRunTime )
typedef struct xTASK_STATUS
{
TaskHandle_t xHandle;//任务句柄
const char *pcTaskName;//任务名字
UBaseType_t xTaskNumber;//任务编号 typedef unsigned long UBaseType_t;
eTaskState eCurrentState;//当前任务状态,eTaskState是一个枚举类型
UBaseType_t uxCurrentPriority;//任务当前的优先级
UBaseType_t uxBasePriority;//任务基础优先级
uint32_t ulRunTimeCounter;//任务运行的总时间
StackType_t *pxStackBase;//堆栈基地址
uint16_t usStackHighWaterMark;//从任务创建以来任务堆栈剩余的最小大小,此值如果太小的话说//明堆栈有溢出的风险
} TaskStatus_t;
u32 TotalRunTime;
UBaseType_t ArraySize,x;
TaskStatus_t *StatusArray;
//第一步:函数uxTaskGetSystemState()的使用
printf("/*********第一步:函数函数uxTaskGetSystemState()的使用*****/\r\n");
ArraySize=uxTaskGetNumberOfTasks();//获取系统任务数量
StatusArray=pvPortMalloc(ArraySize*sizeof(TaskStatus_t));//申请内存
if(StatusArray!=NULL) //内存申请成功
{
ArraySize=uxTaskGetSystemState((TaskStatus_t* )StatusArray,
(UBaseType_t)ArraySize,
(uint32_t*)&TotalRunTime);
printf("TaskName\t\tPriority\t\tTaskNumber\t\t\r\n");
for(x=0;x<ArraySize;x++)
{
//通过串口打印出获取到的系统的有关信息 比如任务名称,
//任务优先级和任务编号
printf("%s\t\t%d\t\t\t%d\t\t\t\r\n",
StatusArray[x].pcTaskName,
(int)StatusArray[x].uxCurrentPriority,
(int)StatusArray[x].xTaskNumber);
}
}
vPortFree(StatusArray); //释放内存