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

    文章

    10854

    浏览量

    211583
  • 计时器
    +关注

    关注

    1

    文章

    420

    浏览量

    32689
  • FreeRTOS
    +关注

    关注

    12

    文章

    484

    浏览量

    62140

原文标题: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

    如何在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 1933次阅读

    Go运行时:4年之后

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

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

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

    ch32v307记录程序运行时

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

    如何保证它们容器运行时的安全?

    紧密耦合的容器运行时继承了主机操作系统的安全态势和攻击面。运行时或主机内核中的任何漏洞及其利用都会成为攻击者的潜在切入点。
    的头像 发表于 11-03 15:24 672次阅读