/**
* @brief 此函数用于获取指定任务的任务优先级, 使用该函数需将宏INCLUDE_uxTaskPriorityGet置 1
* @param xTask:要查找的任务句柄, NULL代表任务自身
* @retval 任务优先级数值(整数)
*/
UBaseType_t uxTaskPriorityGet(const TaskHandle_t xTask)
/**
* @brief 此函数用于改变某个任务的任务优先级, 使用该函数需将宏INCLUDE_vTaskPrioritySet为 1
* @param xTask:要查找的任务句柄, NULL代表任务自身
* @param uxNewPriority:需要设置的任务优先级
* @retval None
*/
void vTaskPrioritySet(TaskHandle_t xTask, UBaseType_t uxNewPriority)
/**
* @brief 此函数用于获取系统中任务的任务数量
* @param None
* @retval 系统中任务的数量(整数)
*/
UBaseType_t uxTaskGetNumberOfTasks(void)
/**
* @brief 此函数用于获取系统中所有任务的任务状态信息, 使用该函数需将宏configUSE_TRACE_FACILITY置 1
* @param xTaskStatusArray:指向 TaskStatus_t 结构体数组首地址
* @param uxArraySize:接收信息的数组大小
* @param pulTotalRunTime:系统总运行时间, 为NULL 则省略总运行时间值
* @retval 获取信息的任务数量(整数)
*/
UBaseType_t uxTaskGetSystemState(TaskStatus_t *const pxTaskStatusArray,
const UBaseType_t uxArraySize, configRUN_TIME_COUNTER_TYPE *const pulTotalRunTime )
TaskStatus_t 结构体
typedef struct xTASK_STATUS
{
TaskHandle_t xHandle; /* 任务句柄 */
const char * pcTaskName; /* 任务名 */
UBaseType_t xTaskNumber; /* 任务编号 */
eTaskState e CurrentState; /* 任务状态 */
UBaseType_t uxCurrentPriority; /* 任务优先级 */
UBaseType_t uxBasePriority; /* 任务原始优先级*/
configRUN_TIME_COUNTER_TYPE ulRunTimeCounter; /* 任务运行时间*/
StackType_t * pxStackBase; /* 任务栈基地址 */
configSTACK_DEPTH_TYPE usStackHighWaterMark; /* 任务栈历史剩余最小值 */
} TaskStatus_t;
/**
* @brief 此函数用于获取指定的单个任务的状态信息, 使用该函数需将宏configUSE_TRACE_FACILITY置 1
* @param xTask:指定获取信息的任务的句柄
* @param pxTaskStatus:接收任务信息的变量
* @param xGetFreeStackSpace:任务栈历史剩余最小值,当为pdFALSE则跳过这个步骤当为pdTRUE则检查历史剩余最小堆栈
* @param eState:任务状态, 可直接赋值, 如想获取代入eInvalid
* @retval None
*/
void vTaskGetInfo(TaskHandle_t xTask,
TaskStatus_t *pxTaskStatus,
BaseType_t xGetFreeStackSpace,
eTaskState eState)
typedef enum
{
eRunning = 0, /* 运行态 */
eReady /* 就绪态 */
eBlocked, /* 阻塞态 */
eSuspended, /* 挂起态 */
eDeleted, /* 任务被删除 */
eInvalid /* 无效 */
} eTaskState;
/**
* @brief 此函数用于获取当前任务的任务句柄, 使用该函数需将宏INCLUDE_xTaskGetCurrentTaskHandle置 1
* @param None
* @retval 当前任务的任务句柄
*/
TaskHandle_t xTaskGetCurrentTaskHandle(void)
/**
* @brief 此函数用于通过任务名获取任务句柄 , 使用该函数需将宏INCLUDE_xTaskGetHandle置 1
* @param pcNameToQuery:任务名
* @retval 任务句柄
*/
TaskHandle_t xTaskGetHandle(const char *pcNameToQuery)
/**
* @brief 此函数用于获取指定任务的任务栈历史最小剩余堆栈; 使用该函数需将宏INCLUDE_uxTaskGetStackHighWaterMark置 1
* @param xTask:任务句柄
* @retval 任务栈的历史剩余最小值
*/
UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask)
/**
* @brief 此函数用于查询某个任务的运行状态, 使用此函数需将宏INCLUDE_eTaskGetState置1
* @param xTask:待获取状态任务的任务句柄
* @retval 任务状态
*/
eTaskState eTaskGetState(TaskHandle_t xTask)
typedef enum
{
eRunning = 0, /* 运行态 */
eReady /* 就绪态 */
eBlocked, /* 阻塞态 */
eSuspended, /* 挂起态 */
eDeleted, /* 任务被删除 */
eInvalid /* 无效 */
} eTaskState;
/**
* @brief 此函数用于以表格的形式获取系统中任务的信息 ; 使用此函数需将宏configUSE_TRACE_FACILITY和configUSE_STATS_FORMATTING_FUNCTIONS置1
* @param pcWriteBuffer:接收任务信息的缓存指针
* @retval None
*/
void vTaskList(char *pcWriteBuffer)
Name : 创建任务的时候给任务分配的名字。
State : 任务的壮态信息, B 是阻塞态, R 是就绪态, S 是挂起态, D 是删除态
Priority : 任务优先级。
Stack : 任务堆栈的高水位线
, 就是堆栈历史最小剩余大小。
Num : 任务编号, 这个编号是唯一的, 当多个任务使用同一个任务名的时候可以通过此编号来做区分。
表格如下所示:
/**
* @brief 此函数用于统计任务的运行时间信息, 使用此函数需将宏configGENERATE_RUN_TIME_STAT、configUSE_STATS_FORMATTING_FUNCTIONS置1
* @param pcWriteBuffer:接收任务运行时间信息的缓存指针
* @retval None
*/
void vTaskGetRunTimeStats(char *pcWriteBuffer)
Task: 任务名称
Abs Time: 任务实际运行的总时间 (绝对时间)
% Time: 占总处理时间的百分比
时间统计API函数使用流程
-
将宏
configGENERATE_RUN_TIME_STATS
置1 -
将宏
configUSE_STATS_FORMATTING_FUNCTIONS
置1 -
当将此宏
configGENERATE_RUN_TIME_STAT
置1之后, 还需要实现2个宏定义:
① portCONFIGURE_TIMER_FOR_RUNTIME_STATE() : 用于初始化用于配置任务运行时间统计的时基定时器;
注意: 这个时基定时器的计时精度需高于系统时钟节拍精度的10至100倍!
② portGET_RUN_TIME_COUNTER_VALUE(): 用于获取该功能时基硬件定时器计数的计数值 。