返回列表 发新帖我要提问本帖赏金: 100.00元(功能说明)

[STM32H5] STM32H5开发之coremark跑跑跑~

[复制链接]
 楼主| yangjiaxu 发表于 2023-7-30 22:23 | 显示全部楼层 |阅读模式
<
#申请原创#@21小跑堂
上一篇我讲了关于串口和printf的应用,同时还做了固件编译时间的输出,这一操作大大减少了固件升级错误,固件版本不确定等问题,属实很有意义。那么今天就继续针对printf来实现coremark跑分吧。
Coremark是什么?
Coremark是一个基准测试程序,用于衡量处理器或系统在整数操作方面的性能。它被广泛用于评估嵌入式系统和微控制器的性能。Coremark基准测试主要关注矩阵操作、链表操作和状态机操作等任务。
那接下来就将coremark来移植到H5上吧,来看看coremark下的H5究竟有多强悍。
Coremark的代码首先是需要下载的,链接如下:https://github.com/eembc/coremark
接下来在coremark查找要测试的芯片,评测跑分是跑了多少分。在官网搜到的跑分记录是1023.03。
399098b7e4f20198b5f6c37c0435bf6a
图1 官方coremark关于H503的跑分数据
通过图1来看,跑的分数还是可以的。接下来就做好移植准备吧。本次移植其实就需要一个串口初始化和串口的重定义,其实这些在上一章都做过了,那么就直接用上一章弄好的源码来实现coremark的移植吧。
首先这里要将下载好的coremark源码解压,然后将用到的源码C文件复制到H503的基础串口输出工程之中。在下载好的coremark资源包之中,找到以下的源码,将这些源码复制到准备好的工程中来。
3ac93e3773d8ef4cda452c329ab33b64
图2 将需要的coremark文件拷贝到工程中来
接下来打开cubemx,找到ICACHE,这里需要使能该功能,否则跑分的数据是不准确的。
786b782fd98794b9a87f9964de654a24
图3 打开ICACHE
接下来添加coremark的代码,这里主要修改的是core_portme.c和core_portme.h文件,还有就是core_main.c之中的main函数与原代码之中的mian冲突了,因此需要修改,这里常规操作就是删除掉原main函数,删除之前复制其里面的初始化函数到core_main.c之中的main函数之内即可。不过我最近学习到了一种新的方法,就是将core_main.c之中的main文件改个名字,然后在原main函数之中调用一下即可,其实我觉得这样更好一些,可以看的更直观。并且很快的改好,不会出现落下某个初始化函数的问题。
2242a78d67b98c8c82e3ea0f072fd447
图4 修改core_main.c之中的main函数名字
fe1fe04924ed9ce7fd12279558a53684
图5 在原main之中调用coremark的main函数
接下来就是修改coremark代码的一些基础配置了。这里需要修改迭代次数,优化等级,运行时间还有堆栈大小的设定等等、
699694b0ffeb58a1ec8b6cc3cf56a403
图6 core_portme.h文件之中的修改
接下来就是针对core_portme.c文件函数修改,这里修改的比较简单,就是修改定时器和需要运行的时间等等。
  1. externuint32_t HAL_GetTick(void);
  2. #define NSECS_PER_SEC 1000//CLOCKS_PER_SEC
  3. #define CORETIMETYPE int32_t//clock_t
  4. #define GETMYTIME(_t) (*_t = HAL_GetTick())//(*_t = clock())
  5. #define MYTIMEDIFF(fin, ini) ((fin) - (ini))
  6. #define TIMER_RES_DIVIDER 1
  7. #define SAMPLE_TIME_IMPLEMENTATION 1
  8. #define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER)
a00acf624678af4f7adc2107630a62d7
图7 core_portme.c文件之中的修改
a295d191591f3d37df43f8b6b1d2c88e
图8 启动文件之中的堆栈数据修改
当以上内容操作完成之后,就可以编译一下试试了。编译0 Error(s), 0 Warning(s).奈斯,看来这次操作没有啥问题嘛。赶紧把代码烧录到开发板之中,发现代码没跑起来,OK,想要给我上一课是吧,这跑不起来可不行,赶紧仿真看看哪里出了问题。通过仿真发现,单步运行的时候多点几下,程序是可以运行到coremark代码的,那咋回事儿呢?后来发现,原来是UseMicroILB没勾选,好嘛,原来是自己的误操作给自己上了一课。勾选上之后,代码就可以正确跑起来了。
7455f81789ae22397e7e4397cbf942c5
图9 coremark跑起来啦
这里可以看出,跑的分数是1002.171371,哦豁,和官方标注的数据差不太多,官方是1023.03。官方说过,Coremark的跑分结果可能会存在一定的误差,这是因为多个因素可能会影响测试结果,例如系统负载、缓存状态、编译器优化等。至此,coremark就操作完成啦。需要注意的是,Coremark只是一个基准测试程序,它可以提供一定的性能参考,但并不代表实际应用中的性能表现。因此,在评估系统性能时,还应考虑其他因素和实际应用场景。

打赏榜单

21小跑堂 打赏了 100.00 元 2023-08-09
理由:恭喜通过原创审核!期待您更多的原创作品~

liu96jp 发表于 2024-1-12 17:03 | 显示全部楼层
跑分移植的很溜嘛,不错不错
g0d5xs 发表于 2024-1-12 17:16 | 显示全部楼层
期待楼主能分享个源码出来,哈哈
b5z1giu 发表于 2024-1-12 17:29 | 显示全部楼层
这个移植看着还挺简单的啊
lamanius 发表于 2024-1-12 18:15 | 显示全部楼层
哇,这个跑分的数据还不错呢,跟官方差不太多
p0gon9y 发表于 2024-1-12 19:20 | 显示全部楼层
其实跑分也是理论,实际来说用不到这么极端的
kaif2n9j 发表于 2024-1-12 20:24 | 显示全部楼层
其实跑分也是理论,实际来说用不到这么极端的
w2nme1ai7 发表于 2024-1-12 21:38 | 显示全部楼层
话说,你要是用IAR的话,分数应该会更高一些
tax2r6c 发表于 2024-1-13 08:10 | 显示全部楼层
这个根据开发环境来说,我觉得KEIL的优化能力没有IAR好
q1ngt12 发表于 2024-1-13 10:05 | 显示全部楼层
嗯嗯,讲的很详细了,而且测试结果也是很不错的
zhizia4f 发表于 2024-1-13 11:24 | 显示全部楼层
我挺喜欢用coremark来测试一个芯片的,这样比较客观
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:擅长电路设计、物联网产品开发、射频产品开发,喜欢打篮球,技术交流,欢迎各位来聊~

783

主题

3316

帖子

10

粉丝
快速回复 在线客服 返回列表 返回顶部