码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • FreeRTOS任务运行时间统计


    前言

    在执行多任务的过程中,如果发现某一任务占用的时间过长,可以拆分这个任务来提高任务并行的效率。FreeRTOS可以通过函数vTaskGetRunTimeStats()来统计各个任务的运行时间占总运行时间的百分比,具体输出格式如下:

    task2_task     	8178		<1%
    IDLE           	1000228		99%
    task1_task     	127		<1%
    Tmr Svc        	1		<1%
    
    • 1
    • 2
    • 3
    • 4

    由左到右依次为任务名、运行的系统时间、占总运行时长的比重。

    使用步骤

    1. 配置FreeRTOSConfig.h

    • configGENERATE_RUN_TIME_STATS 定义为1
    • 定义定时器初始化函数以提供统计的“时基”:portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
    • 定义变量以读取统计定时器的值:portGET_RUN_TIME_COUNTER_VALUE()
    #define configGENERATE_RUN_TIME_STATS	        1             
    #define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()   ConfigureTimerForTimeStats()
    #define portGET_RUN_TIME_COUNTER_VALUE()    FreeRTOSRunTimeTicks
    
    • 1
    • 2
    • 3

    注意这个 FreeRTOSRunTimeTicks 应该是全局变量。

    2.初始化定时器

    ConfigureTimerForTimeStats() 函数的实现就是初始化某一定时器,和写裸机定时器时一样。需要注意的是,这个定时器的精度(速度)要比FreeRTOS的系统时钟要高,范围在10–100倍,一般设置10–20倍即可。更重要的是在定时器中断里要使运行时间统计时基计数器加一。

    void TIM3_IRQHandler(void){
    	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET){
    		TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  
    		FreeRTOSRunTimeTicks++;   // important
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    对了,别忘了在FreeRTOSConfig.h里引用包含这个函数和这个变量的头文件。

    3.调用vTaskGetRunTimeStats(char *)

    在 main 函数或者其他你想调用的位置调用并打印就可以了,参数填入一个足够长的 char 数组,然后打印数组即可。

    // 使用案例
    char InfoBuffer[1000];
    vTaskGetRunTimeStats(InfoBuffer);
    printf("%s\r\n",InfoBuffer);
    
    • 1
    • 2
    • 3
    • 4

    END ---- 2022/08/09 11:14

  • 相关阅读:
    左连接(Left Join)、右连接(Right Join)、内连接(Inner Join)和等值连接
    【pytest官方文档】解读- 如何安装和使用插件
    阿里分布式事务seata
    Vue3+element-plus el-from中el-select选中后无法回显
    一些常见的Windows命令
    Springboot引入jasypt实现加解密
    【历史上的今天】6 月 23 日:图灵诞生日;互联网奠基人出生;Reddit 上线
    c语言基础知识点(一)C语言中的指针运算和数组名的特性
    Typescript基本语法介绍
    Mybatis中动态SQL标签和内置参数介绍
  • 原文地址:https://blog.csdn.net/baidu_41750439/article/details/126244012
  • 最新文章
  • C# 内存安全性的重大演进:重新定义 unsafe 关键字
    [MAF的Agent管道详解-05]对话历史的持久化和输入输出的增强
    使用typedef封装函数指针新类型
    只有踩过坑才懂:前端生成唯一 ID,别用 Date.now ()了!试试它crypto.randomUUID()
    C#一行代码免写Web登录页:PicoServer 的 AddBasicAuth 中间件实战
    共绩科技:跨云弹性推理场景下,模型分发如何跟上算力调度
    薄雾之上的上界:高概率复杂度的分析
    高管的 AI 精神病
    【译】构建前先计划:带你了解 Visual Studio 中的 Plan Agent
    一行代码干翻 Java 反射?EggG 流式反射调用让反射优雅到不可思议
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号