[导读]大家好,我是张巧龙,提起MCU性能测试,最著名的就是CoreMark和Dhrystone。CoreMark以每秒迭代次数作为性能评价,而Dhrystone的DMIPS与Dhrystone标准相关。本文讨论CoreMark,先来看看MCU厂家如何宣传自家产品性能。NXPi.MXRT...
大家好,我是张巧龙,提起MCU性能测试,最著名的就是CoreMark和Dhrystone。CoreMark以每秒迭代次数作为性能评价,而Dhrystone的DMIPS与Dhrystone标准相关。本文讨论CoreMark,先来看看MCU厂家如何宣传自家产品性能。NXP i.MX RT1170,CoreMark:6468 ;ST STM32H747/757 CoreMark:3224▍揭开神秘面纱:CoreMark是什么?为什么它可以作为MCU的性能指标?这个数是怎么计算出来的?CoreMark是衡量嵌入式系统中微控制器性能的基准。通过包含列表处理(查找和排序)、矩阵处理(常见的矩阵操作)、状态机(确定输入流是否包含有效数字)和CRC(循环冗余校验)等算法的测试给出性能评价。需要下载的软件包是免费开源的, 可以在官方网站找到:EEMBC’s CoreMark®,网页截图如下。▍作业不难:怎么将CoreMark移植到自己的MCU上?运行CoreMark需要哪些外设支持?51单片机也可以跑CoreMark的,所以硬件上不用担心。运行CoreMark,需要定时器提供计时功能,还需要一种向外部打印消息的手段。
一个比较简单的方法是,调用stdio.h中定义的printf()函数,将其重定向到串口。现以使用STM32CubeIDE将CoreMark移植到STM32G071为例进行说明。● Step1:复制必要文件到目标工程。现已准备好目标MCU的软件工程,其文件结构如下图右侧所示。从CoreMark官网获得软件包,软件包解压后文件结构如下图左侧所示。在右侧软件工程中新建文件夹CoreMark,将左侧绿色框中,core_list_join.c、core_main.c、core_matrix.c、core_state.c、core_util.c、coremark.h等文件放到CoreMark文件夹里。打开左侧simple文件夹,将core_portme.c复制到Src文件夹中,将core_portme.h复制到Inc文件夹中。
(彩色高亮标记与图中颜色标记对应,共5个步骤)● Step2:由于core_main.c文件已定义了main()函数,该main()函数执行时调用core_portme.c中的portable_init()函数作为MCU初始化接口,因此需要将MCU工程中原main.c文件MCU初始化代码移动到到portable_init()函数里并删除原有main.c文件。
以STM32CubeIDE工程为例,需要移动SystemClock_Config和一堆MX_开头的初始化函数(注意相关结构体、函数原型与函数实现要一起移动)。● Step3:CoreMark的分数最终表示为Iterations/Sec,也就是每秒迭代数,而Sec和系统Ticks相关。用过RTOS的朋友应该对这个概念很熟悉,考虑文字不太好解释,直接看core_portme.c里这个宏定义。#define EE_TICKS_PER_SEC 1000● 这里我定义每秒1000个Tick,每个Tick时长1ms,对应定时器每1ms触发一次中断。使用一个计数变量,定时器进入中断一次,该变量值 1;对该变量值/1000即可求得定时器运行时长,也就是上文的Sec。
所以EE_TICKS_PER_SEC并非一定要设置为1000,和定时器中断频率对应即可。与定时相关的函数有以下三个。void start_time(void);//启动计时器;void stop_time(void);//停止计时器;CORE_TICKS get_time(void);//获取计时器的计数值。● 在start_time()里实现定时器启动功能,在stop_time()里实现定时器停止功能,在get_time()中获取中断计数值。数据类型“CORE_TICKS ”实际上就是“unsigned long”。
为方便操作,推荐将计数变量设置为全局变量,这样可以通过extern关键字直接访问。此处以TIM1为例,代码如下://计数变量unsigned long time_ms_ticks=0;
//定时器启动void start_time(void){ (
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
在嵌入式系统工程领域,主要挑战在于在严格的时间约束下实现任务的确定性执行。微控制器通常需要同时执行复杂的数学运算,并管理高频的输入和输出。如果采用简单的定时方法,例如使用阻塞式的忙等待循环,常常会导致处理器饥饿问题,即一...
关键字:
信号发生器
嵌入式系统
STM32
本实验活动重点在于利用微控制器的模数转换器(ADC)外设来监测外部电压源。具体而言,该系统设计用于测量CR1220纽扣电池和5V USB总线供电电源的电压。对这些电平进行监测对于依赖电池作为备用电源的嵌入式系统非常有用,...
关键字:
电压分压器
噪声滤波器
STM32
本项目展示了我们在固件编程方面的初步工作。我们开发该项目,旨在通过实践操作更好地理解课程中的概念和应用。我们的项目名为“电子音调发生器”,通过一个小扬声器产生不同的声音。按下不同的按钮或组合按键,系统会生成不同频率,从而...
关键字:
扬声器
音频合成器
示波器
STM32
嵌入式系统,STM32内部Flash的擦写寿命始终是悬在开发者头顶的达摩克利斯之剑。STM32F103系列Flash典型擦写次数仅为10000次,若每次温度调整、参数变更都直接写入,按每日操作数十次计算,不足一年便逼近寿...
关键字:
STM32
Flash
电池供电的物联网设备中,降低待机功耗是延长续航的核心课题。STM32的Stop模式提供了保留SRAM和寄存器内容的最低功耗状态,是实现“微安级待机、毫秒级唤醒”的关键技术。实测数据表明,STM32L4系列在Stop 2模...
关键字:
STM32
低功耗
一切始于一个我不断在身边发现的常见问题——无论是亲密的朋友,还是我在健身训练的健身房圈子中。经过数周高强度的锻炼后,很多人都在问同一个问题:“我想要增肌的肌肉为什么没有增长,而那些我本意没想练的肌肉却反而变得酸痛?”
关键字:
可穿戴设备
机器学习
STM32
在STM32嵌入式控制中,PID控制器是温度、电机转速、平衡小车等闭环系统的核心算法。本文提供一份可直接移植的增量式PID代码模板,并分享工程中行之有效的参数整定方法。
关键字:
STM32
PID控制器
在STM32软件开发中,ST官方提供两套固件库:HAL(Hardware Abstraction Layer)与LL(Low-Layer)。很多工程师困惑:两者除了API风格不同,运行效率和资源消耗究竟差多少?本文基于S...
关键字:
STM32
HAL库
LL库
本项目是一个专为RT-Thread RT-Spark开发板设计的硬件与软件定制接口。它创建了一个交互式系统,通过物理输入(按钮)产生数字输出(LCD文本和LED信号)。通过连接外部面包板组件与开发板内置功能之间的桥梁,我...
关键字:
LCD
LED
STM32
在STM32嵌入式开发中,精确延时是非常基础但又极其关键的功能。无论是驱动单总线传感器(比如DS18B20)、控制LCD屏幕时序、还是生成精确的脉冲信号,都需要用到微秒级甚至纳秒级精度的延时。很多新手刚开始使用STM32...
关键字:
STM32
嵌入式
在STM32嵌入式开发中,RAM(随机存取存储器)是程序运行时存储动态数据、堆栈、全局变量的核心资源,直接决定了程序能实现的功能复杂度。很多开发者都遇到过莫名的程序崩溃、硬件异常,追根溯源往往是RAM分配错误、占用溢出:...
关键字:
RAM
STM32
在嵌入式STM32开发中,程序崩溃是开发者最常遇到也最头疼的问题之一:程序运行中突然跑飞、进入HardFault中断,开发者往往只能靠加打印猜位置,排查一个bug可能需要几天时间。这时候,Backtrace功能就像是嵌入...
关键字:
嵌入式STM32
STM32
当一个项目需要在STM32上运行FreeRTOS时,摆在工程师面前的不止一条路。STM32CubeMX图形化配置工具的出现,让RTOS的集成从“手工作坊”变成了“流水线作业”。但这是否意味着传统的手写移植已经过时?答案并...
关键字:
STM32
FreeRTOS
一块STM32G431、三颗IRFS7530 MOSFET、两个1mΩ采样电阻——这就是一台20A无人机电调的全部硬件。但从上电到电机平稳空转,中间隔着寄存器配置、ADC同步触发、Park变换、PI调参、SVPWM生成五...
关键字:
STM32
无人机
FOC电调
该项目是一个基于 RT-Spark STM32 开发板的实时、裸机硬件接口。它充当了一个交互式的控制面板,将物理世界与数字世界连接起来。通过读取来自一个 5 个方向操纵杆的输入,该系统会立即触发数字逻辑来控制外部独立的...
关键字:
液晶显示屏
FSMC
开发板
STM32
在工业现场,Modbus凭借其简单性成为事实标准。在STM32上实现Modbus,核心难点在于RTU帧同步与TCP粘包处理。本文将基于FreeModbus库,详解STM32上Modbus RTU与TCP的完整实现,并提供...
关键字:
Modbus RTU
TCP协议
STM32
在STM32开发中,HAL库(Hardware Abstraction Layer)与LL库(Low-layer)的选择常引发争议。HAL库开发快但体积大,LL库性能强但更底层。本文通过实测数据对比两者差异,并提供工程级...
关键字:
STM32
HAL库
LL库
在嵌入式实时系统中,任务切换速度是衡量RTOS实时性的核心指标。标准FreeRTOS在STM32F4系列上的任务切换时间通常在10-20微秒级别,但对于电机控制、高速通信等应用,这仍显不足。本文将探讨如何通过深度内核裁剪...
关键字:
RTOS
STM32
FreeRTOS
裸机
在资源受限的嵌入式场景中,传统RTOS的复杂架构往往成为性能瓶颈。本文将介绍一种基于STM32的极简RTOS内核实现方案,通过精简设计达到微秒级响应,同时保持代码量在2KB以内。
关键字:
裸机开发
STM32
RTOS内核
在物联网设备、可穿戴设备等电池供电场景中,微安级电流优化是延长续航的核心挑战。以STM32L4系列(典型工作电流200μA/MHz)和ESP32为例,其停止模式(Stop Mode)和待机模式(Standby Mode)...
关键字:
STM32
低功耗实战
物联网