当前位置:首页 > 单片机 > 单片机
[导读]1前言出于性能方面的考虑,有的时候,我们希望知道CPU的使用率为多少,进而判断此CPU的负载情况和对于当前运行环境是否足够“胜任”。本文将介绍一种计算CPU占有率的方法以及其实现原理。2移植算法2.1 算法简介此算法

1前言
出于性能方面的考虑,有的时候,我们希望知道CPU的使用率为多少,进而判断此CPU的负载情况和对于当前运行环境是否足够“胜任”。本文将介绍一种计算CPU占有率的方法以及其实现原理。

2移植算法
2.1 算法简介
此算法是基于操作系统的,理论上不限于任何操作系统,只要有任务调度就可以。本文将以FreeRTOST为例来介绍本算法的使用方法。
本文所介绍的算法出处为随Cube库一起提供的,它在cube库中的位置如下图所示:


本文将以STM32F4为例,测试环境为STM3240G-EVAL评估板。

2.2 开始移植
本文以CubeF4内的示例代码工程STM32Cube_FW_F4_V1.10.0ProjectsSTM324xG_EVALApplicationsFreeRTOSFreeRTOS_ThreadCreation为例,IDE使用IAR。
第一步:使用IAR打开FreeRTOS_ThreadCreation工程,将cpu_utils.c文件添加到工程,并在工程中添加对应头文件目录:


第二步:打开FreeRTOST的配置头文件FreeRTOSConfig.h修改宏configUSE_IDLE_HOOK和configUSE_TICK_HOOK的值为1: #define configUSE_PREEMPTION 1


第三步:继续在FreeRTOSConfig.h头文件的末尾处添加traceTASK_SWITCHED_IN与traceTASK_SWITCHED_OUT定义:


第四步:在main.h头文件中include “”cmsis_os.h“”
Main.h :



第五步: 修改工程属性,使编译过程不需要函数原型:


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


第七步:编译并运行测试
在调试状态下使用Live Watch窗口监控全部变量osCPU_Usage的值:


osCPU_Usage是在cpu_utils.c文件中定义的全局变量,表示当前CPU的使用率,是个动态值,由上图可以,CPU使用率的动态值为20%。实际在代码中是按第六步中调用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 结论
通过此方法可以很好的用来评估STM23 MCU的运行性能。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

利用LogiCoA™微控制器,以更低功耗实现与全数字控制电源同等的功能

关键字: 微控制器 电源 CPU

2024年4月18日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 很荣幸地宣布与Edge Impulse建立新的全球合作关系。Edge Im...

关键字: 机器学习 MCU CPU

无论您是在研究如何使用 10GigE 还是寻求所需考虑事项的建议,本文均提供有实践,帮助确保单相机 10GigE 视觉系统设置顺利并拥有良好性能。 我们列出了主机系统配置、布线和相机设置的实践。

关键字: 视觉系统 CPU 存储器

Apr. 16, 2024 ---- NVIDIA新一代平台Blackwell,包含B系列GPU及整合NVIDIA自家Grace Arm CPU的GB200等。TrendForce集邦咨询指出,GB200的前一代为GH2...

关键字: CPU GPU

人工智能是集合众多方向的综合性学科,在诸多应用领域均取得了显著成果[1]。随着航空领域人工智能技术研究的不断深入,面向开放式机载智能交互场景,人工智能的应用可解决诸多问题。例如智能感知、辅助决策等,可利用人工智能算法对多...

关键字: 人工智能 PCIe CPU

CPU针脚弯了,用工具调正就不会有影响。开机自检也通过,CPU 再出问题就不是针脚引起的问题。针脚只要不断就没有问题,有的CPU出厂的时候针脚就有点弯,这并不是什么大问题,只要用镊子轻轻地弄直就可以了。

关键字: CPU 针脚 开机自检

瑞典乌普萨拉,2024年3月27日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR自豪地宣布:公司备受全球数百万开发者青睐的开发环境再次升级,已率先支持瑞萨首款通用32位RISC-V MCU,该 MCU 搭载了瑞萨...

关键字: MCU RISC-V CPU

联发科与高通骁龙的对决可以说是一场性能与价值的较量,那么,你对两者的芯片有了解吗?在移动设备领域,芯片制造商的竞争愈发激烈。其中,来自台湾的联发科(MediaTek)与美国的高通(Qualcomm)无疑是该领域的两大巨头...

关键字: 联发科 高通骁龙 CPU 处理器

云和超大规模服务运营商正不断增大计算密度。随着 Microsoft Cobalt、阿里巴巴的倚天 710、AmpereOne等配置 128 核或以上的 CPU 设计进入市场,单个封装可实现的性能更强,且下一代的目标还将远...

关键字: CPU 处理器

Arm Neoverse 旨在为从云到边缘的全场景基础设施用例提供高性能和出色能效。针对需要更高性能的工作负载和用例,Arm 推出了 Neoverse V 系列。其中,Neoverse V2 核心已被行业先行者广泛部署于...

关键字: 云计算 人工智能 CPU
关闭
关闭