函 数
vTaskGetRunTimeStats()
是 一 个 很 实 用 的 函 数 , 要 使 用 此 函 数 的 话 宏
configGENERATE_RUN_TIME_STATS
和
configUSE_STATS_FORMATTING_FUNCTIONS
必须
都为
1
。如果宏
configGENERATE_RUN_TIME_STATS
为
1
的话还需要实现一下几个宏定义:
●
portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
,此宏用来初始化一个外设来
提供时间统计功能所需的时基,一般是定时器
/
计数器。这个时基的分辨率一定要比
FreeRTOS
的系统时钟高,一般这个时基的时钟精度比系统时钟的高
10~20
倍就可以了。
●
portGET_RUN_TIME_COUNTER_VALUE()
或者
portALT_GET_RUN_TIME_COUNTER_VALUE(Time)
,
这两个宏实现其中一个就行
了,这两个宏用于提供当前的时基的时间值。
函数原型如下:
void vTaskGetRunTimeStats( char *pcWriteBuffer )
具体的操作如下:在任务2中调用运行时间函数,在freertosConfig.h设置相应的宏,并在tim.c中设置时基。
/*task2实现运行时间查询
* @brief task2
* @param pvParameters : 传入参数(未用到)
* @retval 无
*/
void task2(void *pvParameters)
{
char task_buff[300];
uint8_t key = 0;
while (1)
{
key = key_scan(0);
if(key == KEY0_PRES)
{
vTaskGetRunTimeStats(task_buff);
printf("%s\r\n",task_buff);
}
vTaskDelay(10);
}
}
* @brief task2
* @param pvParameters : 传入参数(未用到)
* @retval 无
*/
void task2(void *pvParameters)
{
char task_buff[300];
uint8_t key = 0;
while (1)
{
key = key_scan(0);
if(key == KEY0_PRES)
{
vTaskGetRunTimeStats(task_buff);
printf("%s\r\n",task_buff);
}
vTaskDelay(10);
}
}
freertosConfig.h
/* 运行时间和任务状态统计相关定义 */
#define configGENERATE_RUN_TIME_STATS 1 /* 1: 使能任务运行时间统计功能, 默认: 0 */
#if configGENERATE_RUN_TIME_STATS
#include "./BSP/TIMER/btim.h"
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() ConfigureTimeForRunTimeStats()
extern uint32_t FreeRTOSRunTimeTicks;
#define portGET_RUN_TIME_COUNTER_VALUE() FreeRTOSRunTimeTicks
#endif
#define configUSE_TRACE_FACILITY 1 /* 1: 使能可视化跟踪调试, 默认: 0 */
#define configUSE_STATS_FORMATTING_FUNCTIONS 1 /* 1: configUSE_TRACE_FACILITY为1时,会编译vTaskList()和vTaskGetRunTimeStats()函数, 默认: 0 */
#define configGENERATE_RUN_TIME_STATS 1 /* 1: 使能任务运行时间统计功能, 默认: 0 */
#if configGENERATE_RUN_TIME_STATS
#include "./BSP/TIMER/btim.h"
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() ConfigureTimeForRunTimeStats()
extern uint32_t FreeRTOSRunTimeTicks;
#define portGET_RUN_TIME_COUNTER_VALUE() FreeRTOSRunTimeTicks
#endif
#define configUSE_TRACE_FACILITY 1 /* 1: 使能可视化跟踪调试, 默认: 0 */
#define configUSE_STATS_FORMATTING_FUNCTIONS 1 /* 1: configUSE_TRACE_FACILITY为1时,会编译vTaskList()和vTaskGetRunTimeStats()函数, 默认: 0 */
bim.c
uint32_t FreeRTOSRunTimeTicks;
void ConfigureTimeForRunTimeStats(void)
{
btim_timx_int_init(10-1,90-1);
FreeRTOSRunTimeTicks = 0;
}
void ConfigureTimeForRunTimeStats(void)
{
btim_timx_int_init(10-1,90-1);
FreeRTOSRunTimeTicks = 0;
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
if (htim->Instance == BTIM_TIMX_INT)
{
FreeRTOSRunTimeTicks ++;
}
{
if (htim->Instance == BTIM_TIMX_INT)
{
FreeRTOSRunTimeTicks ++;
}
}