前言

本笔记基于 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. Publish/Subscribe Pattern & Vanilla JavaScript

    Publish/Subscribe Pattern & Vanilla JavaScript https://en.wikipedia.org/wiki/Publish–subscribe_p ...

  2. 为什么 Koa 的官方文档那么丑呀?

    为什么 Koa 的官方文档那么丑呀? koa.js https://koajs.com/ 代码高亮 # $ nvm install 7, node.js v7.x.x+ $ yarn add koa ...

  3. 从长度为 M 的无序数组中,找出N个最小的数

    从长度为 M 的无序数组中,找出 N个最小的数 在一组长度为 n 的无序的数组中,取最小的 m个数(m < n), 要求时间复杂度 O(m * n) 网易有道面试题 const minTopK ...

  4. Azure 计费 & 成本管理 & 取消 Azure 订阅

    Azure 计费 & 成本管理 & 取消 Azure 订阅 https://docs.microsoft.com/zh-cn/azure/cost-management-billing ...

  5. js 在浏览器中使用 monaco editor

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  6. NGK钱包真的安全吗?

    对于数字资产持有者而言,资产的安全永远是首要的,因而数字钱包的安全性显得尤为重要.数字钱包分为冷钱包和热钱包两种.热钱包叫做在线钱包,而冷钱包被称为离线钱包,也叫硬件钱包.数字钱包一旦被盗,被追回的概 ...

  7. 加州金融专访NGK,就NGK DeFi+展开讨论

    近日,加利福尼亚金融日报联合数家知名媒体就DeFi+行业专访了NGK团队代表特德惠斯基. 首先,加利福尼亚金融日报专栏记者迈尔斯表示,目前区块链领域,去中心化金融(DeFi+)的概念是目前市场上面最火 ...

  8. 「NGK每日快讯」12.29日NGK第56期官方快讯!

  9. 教你吃透CSS的盒子模型(Box Model)

    CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用. CSS盒模型本质上是一个盒子,封装周围的H ...

  10. 实现TensorRT-7.0插件自由!(如果不踩坑使用TensorRT插件功能)

    本系列为新TensorRT的第一篇,为什么叫新,因为之前已经写了两篇关于TensorRT的文章,是关于TensorRT-5.0版本的.好久没写关于TensorRT的文章了,所幸就以新来开头吧~ 接下来 ...