任务状态查询API函数介绍(07)

/**
  * @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函数使用流程

  1. 将宏configGENERATE_RUN_TIME_STATS置1

  2. 将宏configUSE_STATS_FORMATTING_FUNCTIONS置1

  3. 当将此宏configGENERATE_RUN_TIME_STAT置1之后, 还需要实现2个宏定义:

① portCONFIGURE_TIMER_FOR_RUNTIME_STATE() : 用于初始化用于配置任务运行时间统计的时基定时器;

注意: 这个时基定时器的计时精度需高于系统时钟节拍精度的10至100倍!

② portGET_RUN_TIME_COUNTER_VALUE(): 用于获取该功能时基硬件定时器计数的计数值 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值