0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MIMXRT1064的FreeRTOS任務(wù)運行時統(tǒng)計信息

li1756686189 ? 來源:嵌入式 MCU ? 作者:嵌入式 MCU ? 2022-12-05 09:17 ? 次閱讀

FreeRTOS有很多很酷的功能,其中一個是它可以報告每個任務(wù)中花費的CPU百分比。

3b1863b0-73e0-11ed-8abf-dac502259ad0.png

需要在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ù)。
3b31c670-73e0-11ed-8abf-dac502259ad0.png
使用串行連接接口UART、USB、SEGGER RTT),也可以使用命令行接口檢索相同的信息
3b4c0418-73e0-11ed-8abf-dac502259ad0.png

信息顯示在Eclipse環(huán)境下的FreeRTOS任務(wù)列表的“運行時”列中(針對MCUXpresso IDE顯示):3b63a3ca-73e0-11ed-8abf-dac502259ad0.png

在FreeRTOS中收集運行時信息通常需要計時器(也可以使用SysTick)。收集的信息可以很好地概括CPU時間的使用情況,從而有助檢查系統(tǒng)負荷。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209366
  • 計時器
    +關(guān)注

    關(guān)注

    1

    文章

    414

    瀏覽量

    32486
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    483

    瀏覽量

    61724

原文標題:MIMXRT1064的 FreeRTOS任務(wù)運行時統(tǒng)計信息

文章出處:【微信號:嵌入式 MCU,微信公眾號:嵌入式 MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何縮短Vivado的運行時

    在Vivado Implementation階段,有時是有必要分析一下什么原因?qū)е?b class='flag-5'>運行時間(runtime)過長,從而找到一些方法來縮短運行時間。
    的頭像 發(fā)表于 05-29 14:37 ?1.4w次閱讀
    如何縮短Vivado的<b class='flag-5'>運行時</b>間

    STM32L476+ST253993增加freertos,但是代碼下進去系統(tǒng)運行時就卡住,為什么?

    我準備在官方的STM32L476+ST253993增加freertos,但是代碼下進去系統(tǒng)運行時就卡住,單步調(diào)試,系統(tǒng)一直卡在prvCheckTasksWaitingTermination中
    發(fā)表于 04-15 07:27

    FreeRTOS創(chuàng)建任務(wù)操作Flash運行時系統(tǒng)調(diào)度出現(xiàn)錯誤

    FreeRTOS:最近在學習freeRTOS,項目描述:用的是freeRTOS V6.0.5版操作系統(tǒng),cotex-M0內(nèi)核。創(chuàng)建了4個任務(wù),在其中的一個
    發(fā)表于 03-06 01:34

    freertos任務(wù)運行時間怎么設(shè)置

    對于相同優(yōu)先級的任務(wù)采用時間片輪詢的方式運行,那比如說有兩個優(yōu)先級都為5的任務(wù),那這兩個任務(wù)運行時間如何設(shè)置呢?在rt-thread中創(chuàng)建
    發(fā)表于 07-19 08:03

    如何在MIMXRT1064評估套件上部署tflite模型?

    我有一個嬰兒哭聲檢測 tflite (tensorflow lite) 文件,其中包含模型本身。我如何將此模型部署到 MIMXRT1064-evk 以通過 MCUXpresso IDE 運行推理。你能推薦一些用于嬰兒哭聲檢測的教程和輸入數(shù)據(jù)集嗎?
    發(fā)表于 04-06 06:24

    如何使用MCUXpresso安全配置工具通過UART閃存MIMXRT1064?

    我正在嘗試使用 MCUXpresso 安全配置工具通過 UART 閃存 MIMXRT1064。所有必要的配置都已完成。引導模式設(shè)置為串行下載器 (01)。處理器連接正確。我們反復遇到同樣的錯誤。是否有任何其他配置或設(shè)置需要完成?請幫助
    發(fā)表于 04-14 06:39

    MiMXRt1064 -EVK停止調(diào)試并報錯的原因?

    嗨,剛開始使用 MiMXRt1064 -EVK,今天它突然停止調(diào)試并出現(xiàn)此錯誤消息,我正在使用板載鏈接服務(wù)器漏洞和 MCUXpresso,版本如下MCUXpresso IDE v11.1.1
    發(fā)表于 04-17 06:07

    如何在MIMXRT1064 EVK中通過USB OTG寫入圖像?

    MIMXRT1064 EVK 中通過 USB OTG 寫入圖像
    發(fā)表于 04-21 06:15

    運行時軟件故障注入器的設(shè)計與實現(xiàn)

    針對實際故障診斷中難以有效獲得故障現(xiàn)場信息的問題,提出通過在軟件運行時注入故障的方式獲取故障現(xiàn)場信息,設(shè)計并實現(xiàn)一種運行時軟件故障注入器,給出其中的故障腳本描
    發(fā)表于 04-06 08:40 ?19次下載

    基于本地任務(wù)與遠程任務(wù)運行時間的CPS和PAA的概念

    針對現(xiàn)有單一預測策略不適用于所有異構(gòu)任務(wù)的問題,提出一種基于本地任務(wù)與遠程任務(wù)運行時間的組合預測方案(CPS)和預測精度保證(PAA)的概念。使用GridSim工具集來實現(xiàn)CPS,將P
    發(fā)表于 01-04 14:13 ?0次下載
    基于本地<b class='flag-5'>任務(wù)</b>與遠程<b class='flag-5'>任務(wù)</b><b class='flag-5'>運行時</b>間的CPS和PAA的概念

    MIMXRT1064CVL5B連接HyperRAM

    NXP MIMXRT1064CVL5B 能否支持使用SPI接口的HyperRAM?使用HyperRam的原因是為LCD存儲幀或者USB記錄數(shù)據(jù)或者以太網(wǎng)采集通信數(shù)據(jù)都需要緩沖區(qū)。使用NXP
    的頭像 發(fā)表于 11-08 09:39 ?1670次閱讀

    Go運行時:4年之后

    自 2018 年以來,Go GC,以及更廣泛的 Go 運行時,一直在穩(wěn)步改進。近日,Go 社區(qū)總結(jié)了 4 年來 Go 運行時的一些重要變化。
    的頭像 發(fā)表于 11-30 16:21 ?691次閱讀

    如何在AUTOSAR OS系統(tǒng)運行時使用事件Event呢?

    在AUTOSAR OS系統(tǒng)中,事件用于向任務(wù)發(fā)送信號信息。本節(jié)解釋事件是什么,如何配置它們以及如何在運行時使用它們。
    發(fā)表于 05-22 10:04 ?2127次閱讀
    如何在AUTOSAR OS系統(tǒng)<b class='flag-5'>運行時</b>使用事件Event呢?

    ch32v307記錄程序運行時

    ch32v307記錄程序運行時間 在程序開發(fā)中,很重要的一項任務(wù)就是對程序的運行時間進行評估。對于大型的程序系統(tǒng)來說,它們通常需要處理大量的數(shù)據(jù)或進行復雜的計算操作。因此,如果程序的運行時
    的頭像 發(fā)表于 08-22 15:53 ?729次閱讀

    如何保證它們?nèi)萜?b class='flag-5'>運行時的安全?

    緊密耦合的容器運行時繼承了主機操作系統(tǒng)的安全態(tài)勢和攻擊面。運行時或主機內(nèi)核中的任何漏洞及其利用都會成為攻擊者的潛在切入點。
    的頭像 發(fā)表于 11-03 15:24 ?532次閱讀