- 函数 uxTaskPriorityGet()
函数原型UBaseType_t uxTaskPriorityGet( TaskHandle_t xTask )
示例:
UBaseType_t query_priority,led_priority;
query_priority = uxTaskPriorityGet(QueryTask_Handler); //获取优先级
printf("query_priority = %d\r\n",query_priority);
- 函数 vTaskPrioritySet()和vtaskList()
void vTaskPrioritySet( TaskHandle_t xTask,UBaseType_t uxNewPriority )
示例:
vTaskPrioritySet(LEDTask_Handler, 5); //更改优先级,最好由系统调用,用户最好不调用
led_priority = uxTaskPriorityGet(LEDTask_Handler);
printf("led_priority = %d\r\n",led_priority);
- uxTaskGetSystemState()
UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
const UBaseType_t uxArraySize,
uint32_t * const pulTotalRunTime )
示例:
uint32_t TotalRunTime;
UBaseType_t taskstate_num;
TaskStatus_t * TaskStatusArray;
UBaseType_t num;
num = uxTaskGetNumberOfTasks();
TaskStatusArray = pvPortMalloc(num*sizeof(TaskStatus_t));
if(TaskStatusArray != NULL) //申请空间是否成功
{
taskstate_num = uxTaskGetSystemState((TaskStatus_t * ) TaskStatusArray,
(UBaseType_t ) num,
(uint32_t * ) &TotalRunTime); //返回统计任务状态的任务个数
printf("TaskName\t\tPriority\t\tTaskNumber\t\tWaterMark\t\t\r\n");
for(int x=0;x<num;x++)
{
//通过串口打印出获取到的系统任务的有关信息,比如任务名称、
//任务优先级和任务编号。
printf("%s\t\t%d\t\t\t%d\t\t\t%d\t\t\r\n",
TaskStatusArray[x].pcTaskName,
(int)TaskStatusArray[x].uxCurrentPriority,
(int)TaskStatusArray[x].xTaskNumber,
(uint16_t)TaskStatusArray[x].usStackHighWaterMark);
}
}
与之功能一样且用起来方便的函数为void vTaskList( char * pcWriteBuffer ),可以直接获取各个任务的信息,然后存储在pcWriteBuffer字符指针中,但是这个字符数组须要在任务外面定义,否则会占用很大一部分堆栈空间。
示例:
vTaskList(InfoBuffer); //获取所有任务的信息
printf("%s\r\n",InfoBuffer); //通过串口打印所有任务的信息
-
vTaskGetInfo()
与3中的任务函数功能一样,这个是统计单个任务的状态信息的。 -
uxTaskGetStackHighWaterMark()
此函数用于检查任务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!
注意:这几个函数都会消耗一定时间,所以最好用在调试阶段。