前言

本笔记基于 stm32+FreeRTOS。

主要参考野火安富莱


概念

简单概要:

  • 各任务cpu利用率:

    打印出各任务在某段时间内站用cpu时长的比例。

  • 原理很简单:

    1. 开启一个高精度的定时器
    2. 让一个全局变量(如:ulCpuTraceTick)不断往上累加
    3. 每次切换任务时,记录上一个任务占用了多少个高精度定时器的tick
    4. 累加到该表示该任务的变量中(如:ulCpuTraceTaskATick
    5. ulCpuTraceTaskATick/ulCpuTraceTick 即可计算出该任务的CPU占用率。

作用

 阔以清晰地看出各个任务的cpu利用率,验证一个系统好坏的方法之一。

 如,一个系统总任务cpu利用率经常 大于80%,会造成一些紧急事件无法及时得到响应,同时,峰值可能超出100%,导致任务滞后。

 又如,一个系统总任务cpu利用率经常 小于 10%,导致资源浪费。

 再如,阔以监测各个任务 cup 占用率,发现某些任务经常 大于70%,便去优化优化该任务。

注:以上数值标准均为个人习惯,并非标准答案!

必看点

  • 影响

     该功能在调试时启用,在产品发布时务必关闭

     因为监测cpu利用率也是消耗cpu资源的。

  • 时钟精度

     一般为系统时钟节拍的 10-20 倍

     如,当前系统节拍为 1000 Hz,那么定时器节拍则为 10000-20000 Hz。按20000 Hz 计算,即 50us 计算一次。由于FreeRTOS没有对其进行溢出保护,所以最大支持计数时间为:2^32 * 50us / 3600s = 59.6 分钟。超出后结果将不准确。

实现

添加几个宏定义

源码

FreeRTOS
/*
* 当前文件为 FreeRTOSConfig.h
*/ #define configUSE_TRACE_FACILITY 1 /* cpu task */ /* Run time and task stats gathering related definitions. */
#define configGENERATE_RUN_TIME_STATS 1 /* cpu task */
#define configUSE_STATS_FORMATTING_FUNCTIONS 1 /* cpu task */
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() (ulCpuTraceTick = 0ul)
#define portGET_RUN_TIME_COUNTER_VALUE() ulCpuTraceTick
STM32 定时器

(待写)

简要说明

  • configUSE_TRACE_FACILITY

    • 启用FreeRTOS可视化追踪调试功能
  • configGENERATE_RUN_TIME_STATS

    • 启用FreeRTOS运行时间统计功能
  • configUSE_STATS_FORMATTING_FUNCTIONS

    • 启用FreeRTOS格式化函数功能
  • portCONFIGURE_TIMER_FOR_RUN_TIME_STATS

    • 重置自定义心跳值
  • portGET_RUN_TIME_COUNTER_VALUE

    • 宏定义自定义心跳变量
  • ulCpuTraceTick

    • 自定义心跳值,高频累加即可。

【FreeRTOS】cpu利用率统计的更多相关文章

  1. Linux如何统计进程的CPU利用率

    1.0 概述 在Linux的/proc文件系统,可以看到自启动时候开始,所有CPU消耗的时间片:对于个进程,也可以看到进程消耗的时间片.这是一个累计值,可以"非阻塞"的输出.获得一 ...

  2. Linux如何统计进程的CPU利用率[转]

    0. 为什么写这篇博客 Linux的top或者ps都可以查看进程的cpu利用率,那为什么还需要了解这个细节呢.编写这篇文章呢有如下三个原因: * 希望在脚本中,能够以过”非阻塞”的方式获取进程cpu利 ...

  3. shell脚本统计多个CPU利用率

    本节主要内容:top命令统计CPU的利用率 一,问题分析 MySQL在Linux下是多线程的,而且只能将多个线程分布到一个CPU上.因此,使用小型服务器,或者PC SERVER,多个CPU利用率并不高 ...

  4. cpu利用率和cpu 队列

    SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果已经无法反映在高并发和高压力下SIP的运行状况,因此需要重新作压力测试.跟在测试人员后面做了快一周的压力测试,压力测试的报告也正式出炉,本 ...

  5. Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

    目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps ...

  6. linux系统性能监控--CPU利用率

    在对系统的方法化分析中,首要且最基本的工具之一常常是对系统的 CPU利用率进行简单测量. Linux以及大多数基于 UNIX的操作系统都提供了一条命令来显示系统的平均负荷(loadaverage) . ...

  7. CPU利用率和CPU负荷(CPU usage vs CPU load)

    对于CPU的性能监测,通常用top指令能显示出两个指标:cpu 利用率和cpu负荷. 其中%Cpu相关的内容: us表示用户进程cpu利用率,sy表示系统内核进程cpu利用率,ni表示运行正常进程消耗 ...

  8. [转帖]震惊,用了这么多年的 CPU 利用率,其实是错的

    震惊,用了这么多年的 CPU 利用率,其实是错的 2018年12月22日 08:43:09 Linuxer_ 阅读数:50 https://blog.csdn.net/juS3Ve/article/d ...

  9. CPU 利用率背后的真相,只有 1% 人知道【转】

    导读:本文翻译自 Brendan Gregg 去年的一篇博客文章 “CPU Utilization is Wrong”,从标题就能想到这篇文章将会引起争议.文章一上来就说,我们“人人皆用.处处使用,每 ...

随机推荐

  1. 全球最好 css3 website

    http://www.awwwards.com/ http://www.revolution.pn/ http://www.bestcss.in/ http://www.csswinner.com/ ...

  2. Scalability & Scale-up & Scale-out

    Scalability & Scale-up & Scale-out 架构,弹性,伸缩性 Scalability 可扩展性 https://en.wikipedia.org/wiki/ ...

  3. Serverless & FaaS

    Serverless & FaaS Function as a Service 通过 Functions(一个事件驱动型无服务器计算平台,还可以解决复杂的业务流程问题)更加高效地进行开发; 在 ...

  4. 封装 React Native 原生组件(iOS / Android)

    封装 React Native 原生组件(iOS / Android) 在 React Native中,有很多种丰富的组件了,例如 ScrollView.FlatList.SectionList.Bu ...

  5. open an iOS simulator from the terminal

    open an iOS simulator from the terminal # simulator $ open -a Simulator flutter https://flutter.dev/ ...

  6. Node.js & 页面截图 & 生成画报

    Node.js & 页面截图 & 生成画报 https://zzk.cnblogs.com/my/s/blogpost-p?Keywords=headless solution 使用 ...

  7. 为什么说NGK引领全球数字资产财富革命

    进入2020年,区块链万业迸发出巨大的能量,事实上区块链和数字经济正是未来全球财富的新方向.区块链和数字货币的增值空间巨大,是数字时代新的经济增长点.目前,全球衍生品市场价值532万亿美元,全球债务市 ...

  8. Java魔法类:Unsafe应用解析

    本文转载自Java魔法类:Unsafe应用解析 前言 Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别.不安全操作的方法,如直接访问系统内存资源.自主管理内存资源等,这些方法 ...

  9. JAVA 8 新特性实用总JAVA 8 新特性实用总结结

    JAVA 8 新特性实用总结 作为一个工作两年多的 老 程序猿,虽然一开始就使用 jdk1.8 作为学习和使用的版本,随着技术的迭代,现有的 JDK 版本从两年前到现在,已经飞速发展到了 JDK 15 ...

  10. POJ-2240(floyd算法简单应用)

    Arbitrage poj-2240 #include<iostream> #include<cstdio> #include<cstring> #include& ...