基于MM32F0140系列MCU实现CoreMark测试的2种方法
本帖最后由 xld0932 于 2025-3-19 11:13 编辑#申请原创# @21小跑堂
1.简述
CoreMark是由EEMBC(Embedded Microprocessor Benchmark Consortium)提出的一项基准测试程序,旨在简化操作并提供一种测试单核处理器核心性能的方法。它使用C语言编写,包含四类运算法则:数学矩阵操作、列举、状态机和CRC(循环冗余校验),这些操作在真实的嵌入式应用中非常常见。CoreMark是衡量中央处理器 (CPU) 和嵌入式微处理器 (MCU) 性能的行业标准基准。
2.通过官网获取CoreMark
2.1.打开EEMBC官方(www.eembc.org),然后点击Benchmarks
2.2.在EEMBC Benchmarks界面找到CoreMark,点击跳转
2.3.在CoreMark界面点击Download,点击跳转
2.4.在Download界面点击GitHub,点击跳转
2.5.在GitHub界面点击Code,选择Download ZIP,进行下载
2.6.下载完成的CoreMark源代码如下所示
3.移植CoreMark到MM32F0140代码工程
3.1.打开MM32F0140的GPIO_LED_Toggle软件工程
3.2.点击工具栏File Extension,Books and Environment...
3.3.在弹出的Manage Project Items窗口中,添加CoreMark Group,在CoreMark Group中添加CoreMark源码和sample文件夹中的core_portme.c文件
3.4.添加完成代码如下所示
3.5.点击工具栏Options for Target...
3.6.在弹出的Option for Target 'GPIO_LED_Toggle'窗口的C/C++选项卡中点击Include Paths后面的...
3.7.在弹出的Folder Setup中添加CoreMark需要包含的头文件路径
3.8.在GPIO_LED_Toggle工程界面,展开APP Group,右击main.c,选择Option for File 'main.c'
3.9.在弹出的Options for File 'main.c'窗口,将Include in Target Build选项勾选去掉
3.10.Include in Target Build选项勾选去掉后如下所示
3.11.在STARTUP Group中,修改startup_mm32f0140_keil.s文件中的堆和栈的大小
3.12.在core_portme.c中,将seed4_volatile的赋值由ITERATIONS修改为5000
3.13.在mm32f0140_it.c中,结合SysTick实现clock的功能
3.14.在core_portme.c中,将NSECS_PRE_SEC修改为1000
3.15.在core_portme.c中,在portable_init函数中添加初始化
4.测试CoreMark性能
4.1.优化等级为o0时的CoreMark测试
4.2.优化等级为o1时的CoreMark测试
4.3.优化等级为o2时的CoreMark测试
4.4.优化等级为o3时的CoreMark测试
4.5.优化等级为ofast时的CoreMark测试
4.6.优化等级为os balanced时的CoreMark测试
4.7.优化等级为oz image size时的CoreMark测试
5.通过官网获取perf_counter
5.1.打开perf_counter官方(www.github.com/GorgonMeducer/perf_counter)
5.2.在GitHub界面点击Code,选择Download ZIP,进行下载
5.3.下载完成的perf_counter源代码如下所示
6.安装perf_counter
6.1.打开perf_counter文件夹下的cmsis-pack文件夹
6.2.双击GorgonMeducer.perf_counter.2.4.0.pack,进行安装
7.使用perf_counter部署CoreMark
7.1.打开MM32F0140的GPIO_LED_Toggle工程
7.2.点击工具栏上的Manage Run-Time Enviroment
7.3.在弹出的Manage Run-Time Enviroment窗口中,勾选CMSIS组中的CORE、Utilities\perf_counter组中的Benchmark和Core,然后点击OK
7.4.此时运行环境就在GPIO_LED_Toggle工程添加完成了
7.5.在STARTUP Group中,修改startup_mm32f0140_keil.s文件中的堆和栈的大小
7.6.在APP Group,在main.c文件中的main函数中,添加coremark_main调用函数
8.通过perf_counter测试CoreMark性能
9.附件
9.1.CoreMark源码:
9.2.基于MM32F0140移植的CoreMark工程:
9.3.perf_counter源码:
9.4.基于MM32F0140移植的perf_counter工程:
有一点需要注意的,官网上下载的最新的perf_counter只支持AC5的编译器环境,不支持AC6 xld0932 发表于 2025-3-19 11:15
有一点需要注意的,官网上下载的最新的perf_counter只支持AC5的编译器环境,不支持AC6 ...
支持AC6的。 WoodData 发表于 2025-3-20 09:08
支持AC6的。
我用MDK-Arm 5.39自带的AC6,编译后有很多错误{:sweat:},换了AC5编译就通过了,是perf_counter哪边需要设置/配置一下吗? xld0932 发表于 2025-3-20 09:56
我用MDK-Arm 5.39自带的AC6,编译后有很多错误,换了AC5编译就通过了,是perf_counter哪边需要 ...
你没看下是啥错误嘛,可能是你其他代码不支持AC6.不是perf_counter的问题。 WoodData 发表于 2025-3-20 11:06
你没看下是啥错误嘛,可能是你其他代码不支持AC6.不是perf_counter的问题。
代码支持AC6的,你看我帖子上,第一种自己移植的CoreMark就是用AC6编译的;第二种perf_counter编译不通过才用AC5的 xld0932 发表于 2025-3-20 11:49
代码支持AC6的,你看我帖子上,第一种自己移植的CoreMark就是用AC6编译的;第二种perf_counter编译不通过 ...
我一直都用AC6编译的perf_counter,没问题的。你估计要好好检查一下是哪里问题 WoodData 发表于 2025-3-22 11:08
我一直都用AC6编译的perf_counter,没问题的。你估计要好好检查一下是哪里问题 ...
编译结果和配置帖上来了,能看出是啥问题吗?
页:
[1]