访问电脑版页面

导航:老古开发网手机版STM32单片机STM32单片机Cube编程

STM32单片机的CPU运行性能的算法测试

导读:
关键字:
STM32单片机,cpu,

1前言

出于性能方面的考虑,有的时候,我们希望知道CPU的使用率为多少,进而判断此CPU的负载情况和对于当前运行环境是否足够“胜任”。

2移植算法

2.1 算法简介

此算法是基于操作系统的,理论上不限于任何操作系统,只要有任务调度就可以。本文将以FreeRTOST为例来介绍本算法的使用方法。

本文所介绍的算法出处为随Cube库一起提供的,它在cube库中的位置如下图所示:

STM3单片机的CPU运行性能的算法测试

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

2.2 开始移植

本文以CubeF4内的示例代码工程STM32Cube_FW_F4_V1.10.0ProjectsSTM324xG_EVALApplicaTIonsFreeRTOSFreeRTOS_ThreadCreaTIon为例,IDE使用IAR。

第一步:使用IAR打开FreeRTOS_ThreadCreaTIon工程,将cpu_uTIls.c文件添加到工程,并在工程中添加对应头文件目录:

STM3单片机的CPU运行性能的算法测试

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

STM3单片机的CPU运行性能的算法测试

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

STM3单片机的CPU运行性能的算法测试

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

Main.h :

STM3单片机的CPU运行性能的算法测试

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

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

STM3单片机的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使用率。

STM3单片机的CPU运行性能的算法测试

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

STM3单片机的CPU运行性能的算法测试

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

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

STM3单片机的CPU运行性能的算法测试

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

STM3单片机的CPU运行性能的算法测试

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

4 结论

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

来源:工程师周亮   作者:lhl545545  2018/11/29 16:01:00
栏目: [ STM32单片机Cube编程]

相关阅读

有关于STM32Cube的几个常见问题(USB设备库)

STM32标准库改为HAL库的程序实现

STM32CubeMX新建工程的过程及方法解析

STM32程序之MAX6675热电偶温度读取

意法半导体STM32Cube微控制器开发软件在GitHub正式上线

基于嵌入式系统原型设计的STM32开放式开发环境详解

意法半导体为STM32Cube生态系统新增LoRaWAN®固件无线更新支持

STM32单片机的CPU运行性能的算法测试

意法半导体发布STM32CubeMonitor工具 可实时显示应用程序运行时的变量

手机红外遥控器发送红外信号到STM32【HAL库】

意法半导体更新TouchGFX软件框架,新增强大功能和支持STM32Cube的便利工具

STM32CubeMX开发工具的安装

浅析STM32 HAL固件库编程文件组织

STM32CubeMX配置工具创建了STM32微控制器 让优化MCU配置参数更加轻松

ST针对STM32微控制器推出一套免费的功能强大的设计工具及软件STM32Cube

ST的 STM32Cube开发工具将支持经市场考验的STM32 F2微控制器

关于stm32CubeMX的stm32f103编程

意法半导体发布最新版的STM32Cube ecosystem Multi-OS软件

意法半导体推出STM32Cube开发工具

意法半导体(ST)灵活便捷的STMCube软件平台帮助设计人员快速上手,支持所有量产STM32微控制器