MIMXRT1064的FreeRTOS任务运行时统计信息

电子说

1.3w人已加入

描述

    FreeRTOS有很多很酷的功能,其中一个是它可以报告每个任务中花费的CPU百分比。

FreeRTOS

    需要在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初始化函数。
FreeRTOS
使用串行连接接口(UART、USB、SEGGER RTT),也可以使用命令行接口检索相同的信息:
FreeRTOS
 

信息显示在Eclipse环境下的FreeRTOS任务列表的“运行时”列中(针对MCUXpresso IDE显示):FreeRTOS

    在FreeRTOS中收集运行时信息通常需要计时器(也可以使用SysTick)。收集的信息可以很好地概括CPU时间的使用情况,从而有助检查系统负荷。

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分