码农知识堂 - 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

  • 相关阅读:
    SpringBoot整合Swagger详解
    计算机毕业设计SSMjava宠物领养饲养交流管理平台【附源码数据库】
    Python基于Flask的高校舆情分析,舆情监控可视化系统
    C++中struct与class区别,C与C++中struct区别
    Java集合篇之深入解析ArrayList,这六问你答的上来吗?
    第八章 字符输入输出和输入验证
    JVM之【字节码/Class文件/ClassFile 内容解析】
    【毕业设计】基于stm32的智能婴儿车 婴儿床 系统 - 物联网 单片机
    【微信小程序】小程序支持的css选择器、小程序自适应单位rpx简介
    WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法
  • 原文地址:https://blog.csdn.net/baidu_41750439/article/details/126244012
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号