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

上一篇我讲了关于串口和printf的应用,同时还做了固件编译时间的输出,这一操作大大减少了固件升级错误,固件版本不确定等问题,属实很有意义。那么今天就继续针对printf来实现coremark跑分吧。
Coremark是什么?
Coremark是一个基准测试程序,用于衡量处理器或系统在整数操作方面的性能。它被广泛用于评估嵌入式系统和微控制器的性能。Coremark基准测试主要关注矩阵操作、链表操作和状态机操作等任务。
那接下来就将coremark来移植到H5上吧,来看看coremark下的H5究竟有多强悍。
Coremark的代码首先是需要下载的,链接如下:GitHub - eembc/coremark: CoreMark® is an industry-standard benchmark that measures the performance of central processing units (CPU) and embedded microcrontrollers (MCU).
接下来在coremark查找要测试的芯片,评测跑分是跑了多少分。在官网搜到的跑分记录是1023.03。

图1 官方coremark关于H503的跑分数据

通过图1来看,跑的分数还是可以的。接下来就做好移植准备吧。本次移植其实就需要一个串口初始化和串口的重定义,其实这些在上一章都做过了,那么就直接用上一章弄好的源码来实现coremark的移植吧。

首先这里要将下载好的coremark源码解压,然后将用到的源码C文件复制到H503的基础串口输出工程之中。在下载好的coremark资源包之中,找到以下的源码,将这些源码复制到准备好的工程中来。

图2 将需要的coremark文件拷贝到工程中来

接下来打开cubemx,找到ICACHE,这里需要使能该功能,否则跑分的数据是不准确的。

图3 打开ICACHE

接下来添加coremark的代码,这里主要修改的是core_portme.c和core_portme.h文件,还有就是core_main.c之中的main函数与原代码之中的mian冲突了,因此需要修改,这里常规操作就是删除掉原main函数,删除之前复制其里面的初始化函数到core_main.c之中的main函数之内即可。不过我最近学习到了一种新的方法,就是将core_main.c之中的main文件改个名字,然后在原main函数之中调用一下即可,其实我觉得这样更好一些,可以看的更直观。并且很快的改好,不会出现落下某个初始化函数的问题。

图4 修改core_main.c之中的main函数名字

图5 在原main之中调用coremark的main函数

接下来就是修改coremark代码的一些基础配置了。这里需要修改迭代次数,优化等级,运行时间还有堆栈大小的设定等等、

图6 core_portme.h文件之中的修改

接下来就是针对core_portme.c文件函数修改,这里修改的比较简单,就是修改定时器和需要运行的时间等等。

复制
externuint32_t HAL_GetTick(void);

#define NSECS_PER_SEC 1000//CLOCKS_PER_SEC

#define CORETIMETYPE int32_t//clock_t

#define GETMYTIME(_t) (*_t = HAL_GetTick())//(*_t = clock())

#define MYTIMEDIFF(fin, ini) ((fin) - (ini))

#define TIMER_RES_DIVIDER 1

#define SAMPLE_TIME_IMPLEMENTATION 1

#define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER)

图7 core_portme.c文件之中的修改

图8 启动文件之中的堆栈数据修改

当以上内容操作完成之后,就可以编译一下试试了。编译0 Error(s), 0 Warning(s).奈斯,看来这次操作没有啥问题嘛。赶紧把代码烧录到开发板之中,发现代码没跑起来,OK,想要给我上一课是吧,这跑不起来可不行,赶紧仿真看看哪里出了问题。通过仿真发现,单步运行的时候多点几下,程序是可以运行到coremark代码的,那咋回事儿呢?后来发现,原来是UseMicroILB没勾选,好嘛,原来是自己的误操作给自己上了一课。勾选上之后,代码就可以正确跑起来了。

图9 coremark跑起来啦

这里可以看出,跑的分数是1002.171371,哦豁,和官方标注的数据差不太多,官方是1023.03。官方说过,Coremark的跑分结果可能会存在一定的误差,这是因为多个因素可能会影响测试结果,例如系统负载、缓存状态、编译器优化等。至此,coremark就操作完成啦。需要注意的是,Coremark只是一个基准测试程序,它可以提供一定的性能参考,但并不代表实际应用中的性能表现。因此,在评估系统性能时,还应考虑其他因素和实际应用场景。
---------------------
作者:yangjiaxu
链接:https://bbs.21ic.com/icview-3318234-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STM32F030是一款由STMicroelectronics公司生产的32位微控制器,它被广泛应用于嵌入式系统中。CoreMark是一种基准测试,用于评估处理器性能。在STM32F030上进行CoreMark分测试,可以测量其处理器的性能指标。 CoreMark测试基于一些基本的处理器操作,如整数操作、位操作和控制流操作,并以单个整数操作为单位进行计数,通过对性能的测量来评估处理器的效能。 进行STM32F030的CoreMark分测试时,我们首先需要选择合适的测试环境和工具。然后,我们将CoreMark测试程序烧录到STM32F030微控制器中,并运行该程序进行测试。测试过程中,我们将观察处理器的性能评估结果,即CoreMark分。 CoreMark分主要有两个指标,分别是CoreMark每秒钟能执行多少次(即CoreMark/MHz)和整个测试运行的总时间(即CoreMark总分)。通过这些指标,我们可以评估STM32F030的处理器在特定的工作负载下的性能。 需要注意的是,CoreMark测试只是性能评估的一种方式,它不能完全代表实际应用中的性能。因此,在选择微控制器时,还需要考虑其他因素,如功耗、内存大小和外设接口等。 总之,STM32F030的CoreMark分测试是一种评估该微控制器处理器性能的方法。通过这种测试,我们可以了解到STM32F030在特定工作负载下的性能指标,并为后续的嵌入式系统开发提供参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值