打印
[程序源码]

单片机也能来跑分,用COREMARK来测测你的单片机性能

[复制链接]
1517|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 yuyy1989 于 2023-8-24 09:24 编辑

#申请原创# @21小跑堂  
CoreMark是由EEMBC的Shay Gla-On于2009年提出的一项基准测试程序,CoreMark的主要目标是简化操作,并提供一套测试单核处理器核心的方法。测试标准是在配置参数的组合下单位时间内运行的CoreMark程序次数(单位:CoreMark/MHz),该数字值越大则说明测试的性能越好,接下来以CW32F030为例介绍如何使用CoreMark来跑分
先到https://github.com/eembc/coremark下载源码
在你的工程文件夹下建立CoreMark目录

将源码根目录中的这几个文件拷贝到新建的文件夹中

barebones目录中的.c和.h也拷贝过去

将CoreMark目录中的.c文件添加至工程中,如果想使用stdio提供的printf可以不添加ee_printf.c和cvt.c

在工程配置的头文件路径中也添加这个文件夹

在core_portme.h中添加宏定义和头文件,根据你的工程配置修改编译器版本和优化级别的定义,如果要使用stdio的printf输出结果最下面两个宏定义改为1,并勾选工程设置中的Use MicroLIB,由于有种说法是用MicroLIB会损失性能我这里就没用,重定向printf的方法这里就不介绍了

编译器版本和优化级别这两个需要自己改成工程设置里的参数,和下面的MEM_LOCATION都是输出最后结果用的字符串,对程序本身的编译运行没影响CLOCKS_PER_SEC每一秒的计数次数,根据你设定的定时器给coremark提供的计数周期进行调整
ITERATIONS 迭代次数,因为coremark要求最少运行10秒才能得到结果,可以根据你的mcu性能增大或减少这个值,性能好的可以增大这个值,性能差的可以减少这个值以减少等待跑分完成的时间
MAIN_HAS_NOARGC表示你的main函数是否有输入参数,单片机裸机开发一般都没有
main.h增加定义

其中main_ms_count是给coremark提供时间计数的,放在定时中断函数里自增,这个值的计数周期乘以CLOCKS_PER_SEC要等于1秒

core_app_uart_sendbyte是为coremark的打印函数提供的串口发送方法

在ee_printf.c中调用串口发送方法

如果单片机内存比较小减小一下ee_printf.c中这个数组的大小,默认是1024,这里改成128测试是没问题的

在core_portme.c中barebones_clock()这个方法中返回时间计数,coremark将根据这个计数来计算跑分时间

可以在这里调用初始化方法,记得注释掉#error开头的

如果你想在原来的main函数中调用跑分,修改core_main.c中的main函数名

新建个core_main.h,在core_main.c和你自己的main文件中包含它

在原来的main函数中完成初始化和跑分调用,我这里用LED闪烁提示跑分完成

还要修改启动文件中堆栈大小,太小的话跑不起来,太大的话又可能编译出错

编译烧录后用USB转串口连接设置的串口引脚,打开串口软件并设置正确的参数,将芯片上电后等待一会就会输出跑分结果

如果运行时间不满10秒可以调大ITERATIONS的值,一直卡住不动调大堆栈的值再尝试
不同编译器和优化级别最后跑出的分数也会不同,可以多换几个设置试试



使用特权

评论回复
评论
21小跑堂 2023-8-18 14:49 回复TA
大佬这篇申请原创,字数不满800哦~可以扩充下内容,扩充后@21小跑堂哦 

相关帖子

沙发
yuyy1989|  楼主 | 2023-8-18 11:30 | 只看该作者
CW32F030C8T6跑分结果,仅供娱乐
修改堆栈

HSI PLL64M

HSE 8MPLL64M

HSI48M


使用特权

评论回复
板凳
yuyy1989|  楼主 | 2023-8-18 13:09 | 只看该作者
PY32F003F16P6
堆栈调整

HSI 24M

HSE 24M


使用特权

评论回复
地板
yuyy1989|  楼主 | 2023-8-18 13:39 | 只看该作者
CW32L083VCT6
堆栈调整

HSE 16MPLL64M

HSI PLL64M

HSI 48M


使用特权

评论回复
5
yuyy1989|  楼主 | 2023-8-18 14:32 | 只看该作者
GD32E230C8T6
修改堆栈

IRC8MPLL72M

HXTALPLL72M


使用特权

评论回复
6
yuyy1989|  楼主 | 2023-8-18 15:18 | 只看该作者
MM32G0141C4P
修改堆栈

HSI8MPLL72M


使用特权

评论回复
7
yuyy1989|  楼主 | 2023-8-18 23:04 | 只看该作者
APMF407IGT6
修改堆栈

HSIPLL168M

HSEPLL168M


使用特权

评论回复
8
jobszheng| | 2023-8-19 09:18 | 只看该作者
其实我一直对跑分有些抵触。
这个分数可以代表着什么呢?
算力吗? 选型的时候考虑还是硬件资源与价格吧!

使用特权

评论回复
9
jiangjiayu| | 2023-8-21 09:21 | 只看该作者
同样的内核有啥好跑分的,同一个内核,影响跑分的只有频率吧

使用特权

评论回复
10
Dick Hou| | 2023-8-21 14:23 | 只看该作者
jiangjiayu 发表于 2023-8-21 09:21
同样的内核有啥好跑分的,同一个内核,影响跑分的只有频率吧

你想错了。

同样的内核,由于各芯片公司设计水平不一样,总线、预取指、FLASH速度等,都会影响效率,所以不同厂家的芯片,即使同一个内核,其跑分却不一样。

使用特权

评论回复
11
Dick Hou| | 2023-8-21 14:52 | 只看该作者
jobszheng 发表于 2023-8-19 09:18
其实我一直对跑分有些抵触。
这个分数可以代表着什么呢?
算力吗? 选型的时候考虑还是硬件资源与价格吧!

有一定的参考价值。跑分可以基于同样的条件(频率、内核等)来比较不同芯片之间的性能,对于算法(同样的运算看谁更快)或功耗(运算时间越久,自然越耗电)类应用,提供了简单的对比方法。

至于MCU的资源和性价比,和这个没有关系。

使用特权

评论回复
12
YJYbutterfly| | 2023-8-22 08:25 | 只看该作者
赞一个!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

692

帖子

6

粉丝