FreeRTOS中与任务相关的一些辅助函数

  1. 函数 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);
  1. 函数 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);
  1. 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

与之功能一样且用起来方便的函数为void vTaskList( char * pcWriteBuffer ),可以直接获取各个任务的信息,然后存储在pcWriteBuffer字符指针中,但是这个字符数组须要在任务外面定义,否则会占用很大一部分堆栈空间。
示例:

vTaskList(InfoBuffer);							//获取所有任务的信息
printf("%s\r\n",InfoBuffer);					//通过串口打印所有任务的信息
  1. vTaskGetInfo()
    与3中的任务函数功能一样,这个是统计单个任务的状态信息的。

  2. uxTaskGetStackHighWaterMark()
    此函数用于检查任务从创建好到现在的历史剩余最小值,这个值越小说明任务堆栈溢出的可能性就越大!
    注意:这几个函数都会消耗一定时间,所以最好用在调试阶段。

你可能感兴趣的:(FreeRTOS)