FreeRTOS有很多很酷的功能,其中一個是它可以報告每個任務(wù)中花費的CPU百分比。
需要在FreeRTOSConfig.h中配置一些#定義:
#define configGENERATE_RUN_TIME_STATS 1
/* 1: generate runtime statistics; 0: no runtime statistics */
可以使用Systick計時器,但這不會給精確的結(jié)果,因此我們該計時器。
#define configGENERATE_RUN_TIME_STATS_USE_TICKS 0
/* 1: Use the RTOS tick counter as runtime counter. 0: use extra timer */
接下來,需要配置如何使用計時器:為此,指定計時器配置函數(shù)的名稱和獲取計時器值的函數(shù):
#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位計數(shù)器 /* runtime counter, used for configGENERATE_RUNTIME_STATS */ 將計時器配置為0.1毫秒(RTOS滴答計時器頻率的10倍),設(shè)置為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); } 接下來是計時器中斷服務(wù)例程的實現(xiàn)。 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 } 最后,在啟動調(diào)度器之前,必須調(diào)用Timer初始化函數(shù)。 使用串行連接接口(UART、USB、SEGGER RTT),也可以使用命令行接口檢索相同的信息: |
信息顯示在Eclipse環(huán)境下的FreeRTOS任務(wù)列表的“運行時”列中(針對MCUXpresso IDE顯示):
在FreeRTOS中收集運行時信息通常需要計時器(也可以使用SysTick)。收集的信息可以很好地概括CPU時間的使用情況,從而有助檢查系統(tǒng)負(fù)荷。
審核編輯:湯梓紅
-
cpu
+關(guān)注
關(guān)注
68文章
10863瀏覽量
211781 -
計時器
+關(guān)注
關(guān)注
1文章
420瀏覽量
32712 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62181
原文標(biāo)題:MIMXRT1064的 FreeRTOS任務(wù)運行時統(tǒng)計信息
文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論