- 函數 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()
此函數用於檢查任務從創建好到現在的歷史剩餘最小值,這個值越小說明任務堆棧溢出的可能性就越大!
注意:這幾個函數都會消耗一定時間,所以最好用在調試階段。