RM新时代网站-首页

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

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

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

MIMXRT1064的FreeRTOS任務(wù)運(yùn)行時(shí)統(tǒng)計(jì)信息

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

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

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

需要在FreeRTOSConfig.h中配置一些#定義:

#define configGENERATE_RUN_TIME_STATS 1

/* 1: generate runtime statistics; 0: no runtime statistics */

可以使用Systick計(jì)時(shí)器,但這不會(huì)給精確的結(jié)果,因此我們?cè)撚?jì)時(shí)器。

#define configGENERATE_RUN_TIME_STATS_USE_TICKS 0

/* 1: Use the RTOS tick counter as runtime counter. 0: use extra timer */

接下來,需要配置如何使用計(jì)時(shí)器:為此,指定計(jì)時(shí)器配置函數(shù)的名稱和獲取計(jì)時(shí)器值的函數(shù):

#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() McuRTOS_AppConfigureTimerForRuntimeStats()

#define portGET_RUN_TIME_COUNTER_VALUE() McuRTOS_AppGetRuntimeCounterValueFromISR()

使用I.MX RT的GPT(通用計(jì)時(shí)器):

#include "fsl_gpt.h"
uint32_t McuRTOS_RunTimeCounter; //需要一個(gè)用于測量時(shí)間的32位計(jì)數(shù)器
/* runtime counter, used for configGENERATE_RUNTIME_STATS */
將計(jì)時(shí)器配置為0.1毫秒(RTOS滴答計(jì)時(shí)器頻率的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);
}
接下來是計(jì)時(shí)器中斷服務(wù)例程的實(shí)現(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
}
最后,在啟動(dòng)調(diào)度器之前,必須調(diào)用Timer初始化函數(shù)。
3b31c670-73e0-11ed-8abf-dac502259ad0.png
使用串行連接接口UARTUSB、SEGGER RTT),也可以使用命令行接口檢索相同的信息
3b4c0418-73e0-11ed-8abf-dac502259ad0.png

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

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

審核編輯:湯梓紅

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

    關(guān)注

    68

    文章

    10854

    瀏覽量

    211578
  • 計(jì)時(shí)器
    +關(guān)注

    關(guān)注

    1

    文章

    420

    瀏覽量

    32689
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    484

    瀏覽量

    62139

原文標(biāo)題:MIMXRT1064的 FreeRTOS任務(wù)運(yùn)行時(shí)統(tǒng)計(jì)信息

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何縮短Vivado的運(yùn)行時(shí)

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

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

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

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

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

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

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

    如何在MIMXRT1064評(píng)估套件上部署tflite模型?

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

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

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

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

    嗨,剛開始使用 MiMXRt1064 -EVK,今天它突然停止調(diào)試并出現(xiàn)此錯(cuò)誤消息,我正在使用板載鏈接服務(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

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

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

    基于本地任務(wù)與遠(yuǎn)程任務(wù)運(yùn)行時(shí)間的CPS和PAA的概念

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

    MIMXRT1064CVL5B連接HyperRAM

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

    Go運(yùn)行時(shí):4年之后

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

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

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

    ch32v307記錄程序運(yùn)行時(shí)

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

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

    緊密耦合的容器運(yùn)行時(shí)繼承了主機(jī)操作系統(tǒng)的安全態(tài)勢(shì)和攻擊面。運(yùn)行時(shí)或主機(jī)內(nèi)核中的任何漏洞及其利用都會(huì)成為攻擊者的潛在切入點(diǎn)。
    的頭像 發(fā)表于 11-03 15:24 ?670次閱讀
    RM新时代网站-首页