[MCU] 使用CoreMark测试W806性能

网络孤客   2021-12-30 10:47 楼主

我首次移植CoreMark,有不对的地方请大侠指教

参考:

给你的MCU跑个分?CoreMark性能测试与移植

学习笔记+如何将coremark程序移植到STM32上

1、下载最新CoreMark

CoreMark官网:https://www.eembc.org/coremark/

代码仓库:github.com/eembc/coremark

移植只需要下图几个源文件,我没有像下图那样建立CoreMark,只是简单把所有*.c文件放Src目录中,*.h文件放Inc目录中

Image.png  2、移植

(1)由于core_main.c文件中定义了main()函数,我把这里的main()函数改名为core_main();

core_portme.h中修改关于main函数的定义,针对裸机main函数无参数,修改宏:

Image.png 工程中main.c文件中调用core_main();

image.png  (2)在core_main.c和core_portme.c增加W806库文件引用

#include "wm_hal.h"

(3)修改平台相关宏定义,

查看编译器的设置

image.png  根据编译器的设置修改core_portme.h中编译器版本、编译选项、储存位置的宏,这个仅作为输出结果,不影响实际测试性能。

注意:COMPILER_FLAGS的值不修改会编译不通过

image.png  

(4)时钟的修改

为测试最高速,在main()中设置

SystemClock_Config(CPU_CLK_240M);

查看wm_cpu.c文件,在SystemClock_Config()中已经对SysTick进行了初始化(执行了HAL_InitTick(TICK_INT_PRIORITY);)

其中TICK_INT_PRIORITY默认为1KHz。

同时定义了uint32_t HAL_GetTick(void);

W806官方把一切准备好了,只需要把SysTick与coremark对接

core_portme.c文件中修改GETMYTIME(_t)宏定义,使它直接调用W806库中HAL_GetTick()函数,注意原单位为us,而HAL_GetTick()返回的是ms,所以需要*1000

#define GETMYTIME(_t)              (*_t = HAL_GetTick()*1000)

 

(5)结果输出,这更简单,板子上已有串口芯片,Upgrade_Tools界面就可以看到输出结果

 

(6)还有一个关键参数——迭代次数,在core_portme.c文件中

image.png  CoreMark要求的最短测试时间为10s,若测试时间低于10s则会报错,见下图:

Image.png  

我在文件中新建一个宏定义

#define ITERATIONS 6000        //定义迭代次数,修改次数使运行时间大于10s

 

3、走起

无标题.png

 

最终结果:573.56分

 

因为文章是事后归纳写的成的,可能有遗留,附上原代码供大家参考和指教:

app.rar (23.88 KB)
(下载次数: 9, 2021-12-30 10:45 上传)

本帖最后由 网络孤客 于 2021-12-30 10:48 编辑

回复评论 (3)

573分是一个什么水平呢,有没有常见芯片的分数对比一下。

点赞  2021-12-30 11:14
引用: tagetage 发表于 2021-12-30 11:14 573分是一个什么水平呢,有没有常见芯片的分数对比一下。

微信图片_20211230111828.jpg 自己对比一下。

点赞  2021-12-30 11:21

W806 工作频率    240Mhz ,573分。

和CM4内核的STM32F4    180M  608分。差不多。

嗯,知道它的分数级别了。

点赞  2021-12-30 11:45
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复