0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

li1756686189 来源:嵌入式 MCU 作者:嵌入式 MCU 2022-12-05 09:17 次阅读

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

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

需要在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初始化函数。
3b31c670-73e0-11ed-8abf-dac502259ad0.png
使用串行连接接口UARTUSB、SEGGER RTT),也可以使用命令行接口检索相同的信息
3b4c0418-73e0-11ed-8abf-dac502259ad0.png

信息显示在Eclipse环境下的FreeRTOS任务列表的“运行时”列中(针对MCUXpresso IDE显示):3b63a3ca-73e0-11ed-8abf-dac502259ad0.png

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

审核编辑:汤梓红

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

    关注

    68

    文章

    10451

    浏览量

    206583
  • 计时器
    +关注

    关注

    1

    文章

    395

    浏览量

    32157
  • FreeRTOS
    +关注

    关注

    12

    文章

    473

    浏览量

    61353

原文标题:MIMXRT1064的 FreeRTOS任务运行时统计信息

文章出处:【微信号:嵌入式 MCU,微信公众号:嵌入式 MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何缩短Vivado的运行时

    在Vivado Implementation阶段,有时是有必要分析一下什么原因导致运行时间(runtime)过长,从而找到一些方法来缩短运行时间。
    的头像 发表于 05-29 14:37 1.4w次阅读
    如何缩短Vivado的<b class='flag-5'>运行时</b>间

    STM32L476+ST253993增加freertos,但是代码下进去系统运行时就卡住,为什么?

    我准备在官方的STM32L476+ST253993增加freertos,但是代码下进去系统运行时就卡住,单步调试,系统一直卡在prvCheckTasksWaitingTermination中
    发表于 04-15 07:27

    FreeRTOS创建任务操作Flash运行时系统调度出现错误

    FreeRTOS:最近在学习freeRTOS,项目描述:用的是freeRTOS V6.0.5版操作系统,cotex-M0内核。创建了4个任务,在其中的一个
    发表于 03-06 01:34

    freertos任务运行时间怎么设置

    对于相同优先级的任务采用时间片轮询的方式运行,那比如说有两个优先级都为5的任务,那这两个任务运行时间如何设置呢?在rt-thread中创建
    发表于 07-19 08:03

    FreeRTOS任务运行时统计实验出现怪异现象的解决办法?

    ;/************************************************ALIENTEK 战舰STM32F103开发板 FreeRTOS实验2-1FreeRTOS任务状态与
    发表于 07-28 07:22

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

    我有一个婴儿哭声检测 tflite (tensorflow lite) 文件,其中包含模型本身。我如何将此模型部署到 MIMXRT1064-evk 以通过 MCUXpresso IDE 运行推理。你能推荐一些用于婴儿哭声检测的教程和输入数据集吗?
    发表于 04-06 06:24

    如何使用MCUXpresso安全配置工具通过UART闪存MIMXRT1064

    我正在尝试使用 MCUXpresso 安全配置工具通过 UART 闪存 MIMXRT1064。所有必要的配置都已完成。引导模式设置为串行下载器 (01)。处理器连接正确。我们反复遇到同样的错误。是否有任何其他配置或设置需要完成?请帮助
    发表于 04-14 06:39

    MiMXRt1064 -EVK停止调试并报错的原因?

    嗨,刚开始使用 MiMXRt1064 -EVK,今天它突然停止调试并出现此错误消息,我正在使用板载链接服务器漏洞和 MCUXpresso,版本如下MCUXpresso IDE v11.1.1
    发表于 04-17 06:07

    如何在MIMXRT1064 EVK中通过USB OTG写入图像?

    MIMXRT1064 EVK 中通过 USB OTG 写入图像
    发表于 04-21 06:15

    运行时软件故障注入器的设计与实现

    针对实际故障诊断中难以有效获得故障现场信息的问题,提出通过在软件运行时注入故障的方式获取故障现场信息,设计并实现一种运行时软件故障注入器,给出其中的故障脚本描
    发表于 04-06 08:40 19次下载

    基于本地任务与远程任务运行时间的CPS和PAA的概念

    针对现有单一预测策略不适用于所有异构任务的问题,提出一种基于本地任务与远程任务运行时间的组合预测方案(CPS)和预测精度保证(PAA)的概念。使用GridSim工具集来实现CPS,将P
    发表于 01-04 14:13 0次下载
    基于本地<b class='flag-5'>任务</b>与远程<b class='flag-5'>任务</b><b class='flag-5'>运行时</b>间的CPS和PAA的概念

    MIMXRT1064CVL5B连接HyperRAM

    NXP MIMXRT1064CVL5B 能否支持使用SPI接口的HyperRAM?使用HyperRam的原因是为LCD存储帧或者USB记录数据或者以太网采集通信数据都需要缓冲区。使用NXP
    的头像 发表于 11-08 09:39 1314次阅读

    Go运行时:4年之后

    自 2018 年以来,Go GC,以及更广泛的 Go 运行时,一直在稳步改进。近日,Go 社区总结了 4 年来 Go 运行时的一些重要变化。
    的头像 发表于 11-30 16:21 532次阅读

    如何在AUTOSAR OS系统运行时使用事件Event呢?

    在AUTOSAR OS系统中,事件用于向任务发送信号信息。本节解释事件是什么,如何配置它们以及如何在运行时使用它们。
    发表于 05-22 10:04 1461次阅读
    如何在AUTOSAR OS系统<b class='flag-5'>运行时</b>使用事件Event呢?

    ch32v307记录程序运行时

    ch32v307记录程序运行时间 在程序开发中,很重要的一项任务就是对程序的运行时间进行评估。对于大型的程序系统来说,它们通常需要处理大量的数据或进行复杂的计算操作。因此,如果程序的运行时
    的头像 发表于 08-22 15:53 482次阅读