本帖最后由 latera 于 2025-2-12 08:38 编辑
#申请原创#
这篇文章使用上一篇文章新建的简单工程来测试stm32l562的实际速度。上一篇文章通过stm32cubemx生成的工程,带有usart1的初始化,usart1连接到stlink上,并且stlink连接到电脑,将虚拟出一个串口。这样就可以用这个串口来打印信息,不用再使用其他usb转串口来连接开发板。
一个MCU的性能如何,是可以通过统一跑分测试软件来评估的。对于嵌入式芯片,常听说的跑分测试就有CoreMark。
1. 关于CoreMark
CoreMark是一个简单但精密的基准测试,专门用于测试处理器核心的功能。运行CoreMark会产生一个分数CoreMark/MHz,使用户能够快速比较不同的处理器。
2. 移植CoreMark
2.1. 源文件获取
CoreMark的官网为 www.eembc.org,源代码可以从github上下载,对应地址为https://github.com/eembc/coremark。
下载后得到的源码如下:
我们只需要关注根目录下的文件和simple这个文件夹。
在通过stm32cubemx生成的keil工程根目录下新建一个名为CoreMark的文件夹,并将以上2幅图的框选的文件复制CoreMark文件夹中。因为CoreMark和MDK-ARM这个文件夹同一层级。比较方便后面的工程配置。
2.2. 工程配置
在keil工程中添加CoreMark文件夹中的c文件
并且在工程配置的头文件路径中增加CoreMark的文件路径。因为之前将CoreMark放置在和MDK-ARM同一层级。所以只需要设置如下:
2.3. 文件内容修改
将文件添加到工程,并不能直接编译成功,需要修改部分内容
core_portme.c中增加printf的串口输出函数,和时间相关的定义。
(以下图片,左侧为源文件未修改前的状态。右侧为修改后的内容。)
在core_portme.h 中修改COMPILER_VERSION 和 COMPILER_FLAGS 定义, 这2个定义只是在输出信息时有用。
并且增加ITERATIONS的定义,这个定义表示coremark跑分执行的次数。
因为core_main.c中也用到main这个函数,和原keil工程中main函数冲突。为了不尽量修改原keil的代码。将core_main.c修改如下:
并在core_portme.h中修改MAIN_HAS_NOARGC为1。
CoreMark的代码就修改完成,此时就可以成功编译了。
在原main.ce文件中调用coremark_main()即可。
3. 测试benchmark
通过串口打印信息,coremark打分只有360,从官网上获得的是分数是4百。这有点不确定哪里的问题。。
|