电子说
FreeRTOS有很多很酷的功能,其中一个是它可以报告每个任务中花费的CPU百分比。
需要在FreeRTOSConfig.h中配置一些#定义:
#define configGENERATE_RUN_TIME_STATS 1
/* 1: generate runtime statistics; 0: no runtime statistics */
可以使用Systick计时器,但这不会给精确的结果,因此我们该计时器。
#define configGENERATE_RUN_TIME_STATS_USE_TICKS 0
/* 1: Use the RTOS tick counter as runtime counter. 0: use extra timer */
接下来,需要配置如何使用计时器:为此,指定计时器配置函数的名称和获取计时器值的函数:
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() McuRTOS_AppConfigureTimerForRuntimeStats()
#define portGET_RUN_TIME_COUNTER_VALUE() McuRTOS_AppGetRuntimeCounterValueFromISR()
使用I.MX RT的GPT(通用计时器):
#include "fsl_gpt.h" uint32_t McuRTOS_RunTimeCounter; //需要一个用于测量时间的32位计数器 /* runtime counter, used for configGENERATE_RUNTIME_STATS */ 将计时器配置为0.1毫秒(RTOS滴答计时器频率的10倍),设置为1 kHz: static void AppConfigureTimerForRuntimeStats(void) { uint32_t gptFreq; gpt_config_t gptConfig; GPT_GetDefaultConfig(&gptConfig); /* Initialize GPT module */ GPT_Init(GPT2, &gptConfig); /* Divide GPT clock source frequency by 3 inside GPT module */ GPT_SetClockDivider(GPT2, 3); /* Get GPT clock frequency */ gptFreq = CLOCK_GetFreq(kCLOCK_PerClk); /* GPT frequency is divided by 3 inside module */ gptFreq /= 3; /* Set GPT module to 10x of the FreeRTOS tick counter */ gptFreq = USEC_TO_COUNT(100, gptFreq); /* FreeRTOS tick is 1 kHz */ GPT_SetOutputCompareValue(GPT2, kGPT_OutputCompare_Channel1, gptFreq); /* Enable GPT Output Compare1 interrupt */ GPT_EnableInterrupts(GPT2, kGPT_OutputCompare1InterruptEnable); /* Enable at the Interrupt and start timer */ EnableIRQ(GPT2_IRQn); GPT_StartTimer(GPT2); } 接下来是计时器中断服务例程的实现。 void GPT2_IRQHandler(void) { /* Clear interrupt flag.*/ GPT_ClearStatusFlags(GPT2, kGPT_OutputCompare1Flag); McuRTOS_RunTimeCounter++; /* increment runtime counter */ #if defined __CORTEX_M && (__CORTEX_M == 4U || __CORTEX_M == 7U) __DSB(); #endif } 最后,在启动调度器之前,必须调用Timer初始化函数。 使用串行连接接口(UART、USB、SEGGER RTT),也可以使用命令行接口检索相同的信息: |
信息显示在Eclipse环境下的FreeRTOS任务列表的“运行时”列中(针对MCUXpresso IDE显示):
在FreeRTOS中收集运行时信息通常需要计时器(也可以使用SysTick)。收集的信息可以很好地概括CPU时间的使用情况,从而有助检查系统负荷。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !