首页 > 其他分享 >STM32一种计算CPU使用率的方法及其实现原理

STM32一种计算CPU使用率的方法及其实现原理

时间:2024-11-15 17:11:02浏览次数:1  
标签:使用率 函数 钩子 STM32 tick CPU 空闲

本文将以STM32F429 + FreeRTOS + KEIL为测试环境,看下MCU的使用率

1 、计算STM32使用率的官方方法在其CubeMX的固件库中

2、加入自己的工程

2.1、文件cpu_utils.c有描述使用的步骤

2.2、实操一遍

第一步:将上图中的 cpu_utils.c 文件添加到工程中,并将其头文件路径加入工程中;


第二步:打开FreeRTOST的配置头文件FreeRTOSConfig.h

  • 开启空闲钩子函数功能 configUSE_IDLE_HOOK = 1
  • 开启时间片钩子函数功能 configUSE_TICK_HOOK = 1
  • 开启抢占式调度configUSE_PREEMPTION = 1 


第三步:继续在FreeRTOSConfig.h头文件的末尾处添加两个宏函数

第四步:在main.h头文件中加入 #include "cmsis_os.h"

第五步:在工程中任何用户代码处都可以调用osGetCPUUsage()函数来获取当前CPU的使用率
 

第六步:编译并运行测试

osCPU_Usage是在cpu_utils.c文件中定义的全局变量,表示当前CPU的使用率,是个动态值,由上图可以,CPU使用率的动态值为1%。

实际在代码中是按第六步中调用osGetCPUUsage()函数来获取当前CPU的使用率的。
至此,算法使用方法介绍完毕。

3、算法实现原理分析

操作系统运行时是不断在不同的任务间进行切换,而驱动这一调度过程是通过系统tick来驱动的,即每产生一次系统tick则检查一下当前正在运行的任务的环境判断是否需要切换任务,即调度,如果需要,则触发PendSV,通过在PendSV中断调用vTaskSwitchContext()函数来实现任务的调度。而本文所要讲述的CPU使用率算法是通过在一定时间内(1000个时间片内),计算空闲任务所占用的时间片总量,100减去空闲任务所占百分比则为工作任务所占百分比,即CPU使用率。

 此函数为空闲任务钩子函数,每次当切换到空闲任务时就会运行此钩子函数,它的作用就是记录当前空闲任务的句柄并保存到全局变量xIdleHandle。

 

此函数为操作系统的tick钩子函数,即每次产生系统tick中断都会进入到此钩子函数。此钩子函数实际上就是具体计算CPU使用率的算法了。osCPU_TotalIdleTime是一个全局变量,表示在1000个tick时间内空闲任务总共占用的时间片,CALCULATION_PERIOD宏的值为1000,即每1000个tick时间内重新计算一次CPU的使用率。


下面两个函数就是如何计算osCPU_TotalIdleTime的: 

这两个函数是调度器钩子函数,在调度器进行任务切进和切出时分别回调,StartIdleMonitor()函数记录切换到空闲任务时的时间点,EndIdleMonitor()则在退出空闲任务时计算此次空闲任务花费多长时间,并累加到osCPU_TotalIdleTime,即空闲任务总共占用的时间片。

 

全局变量osCPU_Usage保存的就是CPU的使用率,它是在操作系统的tick钩子函数中每隔1000个tick就被重新计算一次。

4、结论

通过此方法可以很好的用来评估STM32 MCU的运行性能。

标签:使用率,函数,钩子,STM32,tick,CPU,空闲
From: https://www.cnblogs.com/dzjl/p/18548305

相关文章

  • STM32项目实战:基于STM32U5的智能大棚温控系统(LVGL),附项目教程/源码
    《智能大棚温控系统_STM32U5》项目完整文档、项目源码,点击下方链接免费领取。项目资料领取https://s.c1ns.cn/F5XyUSTM32项目实战之“智能大棚温控系统”(基于STM32U5)今天小编来分享一个《智能大棚温控系统》的项目案例,硬件平台是STM32U5开发板+资源扩展板+显示触摸屏+仿真器,项......
  • 基于stm32的bacnet协议
    bacnet协议对于国内网站来说,几乎可以说资料为零,通俗大论一遍,具体操作方法屁都没说先从工具说起开发工具BACnetScan:(讯绕提供)(工具1)链接:https://pan.baidu.com/s/1TJxc0xaEsCT3lJOlG78B7w提取码:t7bwYabe:(工具2)链接:https://pan.baidu.com/s/1jfsbGQwv08GISF0VeOjY_g提取码:mmdc......
  • STM32简介
    STM32F11、片上资源/外设Peripheral深颜色内核里的外设,其它为外部外设各外设作用介绍:NVIC:内核中用于管理中断的设备,比如配置中断优先级SysTick:内核中的定时器,主要用来给操作系统提供定时服务RCC:对系统的时钟进行配置,STM32中其它外设上电情况下,默认是没有时钟的,没有时钟的......
  • 基于STM32的智能红绿灯系统设计
    引言本项目基于STM32微控制器设计了一个智能红绿灯系统,通过集成多个传感器模块和控制设备,实现对道路交通的智能化控制。该系统能够根据交通流量自动调整红绿灯的切换时间,提升道路通行效率,缓解交通拥堵。项目涉及硬件设计、传感器数据处理、交通信号管理的实现,适用于城市十字路......
  • CPU性能分析方法论 TMA(Top-down Microarchitecture Analysis)
    frompixiv前置知识指令流水线与分支预测指令流水线(英语:Instructionpipeline)是为了让计算机和其它数字电子设备能够加速指令的通过速度(单位时间内被执行的指令数量)而设计的技术。流水线在处理器的内部被组织成层级,各个层级的流水线能半独立地单独运作。每一个层级都被管理......
  • Linux cpu hotplug
    背景Readthefuckingsourcecode!--By鲁迅Apictureisworthathousandwords.--By高尔基说明:Kernel版本:4.14ARM64处理器使用工具:SourceInsight3.5,Visio1.介绍LinuxCPU热插拔,支持在系统启动后,关闭任意一个secondarycpu(在ARM架构中,CPU0为bootcpu,不能被......
  • stm32 M750基于4g的物联网(阿里云)环境监测系统设计求助
    前言:基于正点原子的,用的阿里云平台,之前的主函数设备上传数据代码是这个,按下KEY0后成功输送给阿里云 key=key_scan(0);//按键if(key==KEY0_PRES){ snprintf(DTU_DATA,sizeof(DTU_DATA),//将数据以json形式传送到阿里云"......
  • 【Ubuntu】查看系统中的CPU和DDR的使用状态
    目录一查看CPU状态二查看内存(DDR)状态一查看CPU状态top 或 htop:实时显示系统资源使用情况,包括CPU使用率、负载等。htop比top更直观,因为它提供了彩色的UI和鼠标支持,但需要先安装。 top命令是一个强大的系统监视工具,它可以实时显示系统中各个进程的资源占用状况,包括......
  • Linux CPU 拓扑结构之调度域 调度组 - 以8核ARM big.Little架构处理器为例
    CPU拓扑结构简介SMTLevel超线程处理器的一个核心MCLevel多核CPU的一个核心DIELevel一个物理CPU的晶片(注意不是package,package是封装好了的,肉眼看到的CPU处理器)(覆盖系统所有的CPU(CPU0~CPUN))cpu最小级别的就是超线程处理器的一个smt核,次小的一级就是一个多核cpu......
  • 基于STM32设计的矿山环境监测系统(NBIOT)_262
    文章目录一、前言1.1项目介绍【1】开发背景【2】研究的意义【3】最终实现需求【4】项目硬件模块组成1.2设计思路【1】整体设计思路【2】上位机开发思路1.3项目开发背景【1】选题的意义【2】摘要【3】国内外相关研究现状【5】参考文献1.4......