你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【F769IDISCOVERY评测】Coremark移植教程与跑分测试

[复制链接]
风子 提问时间:2016-12-3 02:38 /
STM32F769I-DISCOSTM32官网 Coremark移植与跑分测试
Coremark是被公认为比较标准的测试处理器性能工具,基本成为了业界标准,网上移植Coremark到STM32的教程很多,不过这里还是把自己的移植过程写下了,当做是记笔记了,顺便自己研究了下,做了些小改动,比官方移植文档里少了很多修改代码的内容,简单了很多。

首先当然是去官网下载Coremake源代码,接着下载和安装STM32CUBEMX,IAR,以及STM32CubeF7库文件,这个过程就直接略过了。

第一部分
待测试MCU的准备工作,主要包括建立一个能成功运行的STM32工程,配置好STM32F769的系统时钟,配置好串口输出和printf函数重定向,用于测试结果的输出,下面使用STM32CubeMX配合IAR来完成以上工作。


1.     用Cubemx新建一个工程,选择开发板STM32F769I-DISCO
image1.png

2.     打开RCC,使用外部时钟,为获得最高性能,CPU时钟配置为最高的216 MHz
image2.png
image3.png

3.     开发板自带ST-LINK V2-1,设计了虚拟串口功能,连接MCU的USART1,PA9,PA10,打开USART1,用于测试结果输出,配置参数如图 image4.png
image5.png


4.     打开ART加速器,指令预取指,CPU DCache和ICache
image6.png

5.     接下来就是生成工程,选择EWARM,使用IAR打开工程
image7.png

6.     试着编译一下,没有错误,没有警告,然后添加串口重定向代码,切记一定要写在USER CODE BEGIN x 和USER CODE END x之间,这段代码可以在STM32CubeF7库中以下文件找到

STM32Cube_FW_F7_V1.5.0\Projects\STM32F769I_EVAL\Examples\UART\UART_Printf\Src\main.c
image8.png

7.     在主函数添加测试代码,即可变意思下载看到效果(假设你已经正确安装了ST-LINK驱动)
image9.png
至此,第一部分的准备工作就完成了,下面开始第二部分。

第二部分
移植Coremark

1.     解压先前下载的Coremark,将相关文件复制到工程中
image10.png

2.     将Coremark代码文件添加到IAR工程中,并添加头文件的包含路径
image11.png

3.     此时编译,就会有些错误了,因为移植工作还没有完成,找到core_portme.c中的void portable_init(core_portable *p, int *argc, char *argv[])函数,将main.c中main函数的初始化代码部分复制到此函数中
image12.png

这里调用的SystemClock_Config()和 Error_Handler()函数在main.c中,也需要复制到core_portme.c中,同时复制main.c文件开头的头文件包含和函数声明放在文件最开始地方

image13.png
其他外设初始化函数,在用cube生成工程的时候选择了生成独立的.c和.h文件,所以不需要复制。


4.     此时main.c文件中的内容已经都被搬到了core_portme.c中,将它从工程中删除,因为core_main.c中也有个main函数,如果不删除会冲突。
image14.png
5.     接下来是修改定时器的相关代码,使用SysTick计时,SystemClock_Config 函数中SysTick被配置为没1ms产生一次中断,在中断中对计时全局变量uwTick进行加1,相关代码如下:
image15.png
image16.png
image17.png
core_portme.c中的start_time();stop_time();等函数通过GETMYTIME这个宏获取时间,start_time_val和stop_time_val实际上都是uint32_t,记录开始和结束计时的当前值,就是当前uwTick的值
image18.png
这个宏也是在core_portme.c中定义的,明白了它的意义后,我们就知道怎么修改了
image19.png
HAL_GetTick这个函数就是返回uwTick的当前值,正是我们所需要的,

EE_TICKS_PER_SEC这个值表示每秒钟的Tick次数,SysTick每 1ms产生一次中断,所以该值应该为1000,这样,计时相关代码就修改好了。
6.  此时编译工程,发现还有两个错误:
image20.png
先看第二个,ITERATIONS表示迭代次数,在core_portme.c中用到,CoreMark要求程序运行10秒以上,该值需要根据不同情况自己修改位合适的值,有时要多次测试
image21.png
再看第一个错误, FLAGS_STR实际上是COMPILER_FLAGS没有定义,编译器参数
image22.png
这里的信息是在最终结果中输出显示的,所以我们在工程中设置什么,就可以写什么。

现在先设置优化等级,为 HighSpeed,No_size_constraints
image23.png
所以根据刚刚的设置,COMPILER_FLAGS可以定义如下图,顺便也把编译器的信息放上去
image24.png
-Ohs表示优化等级为 HighSpeed。

7. 到这里,再编译工程,已经没有错误没有警告,移植完全成功,接下来就是下载测试,查看结果了

不过,本人在测试的时候,遇到了两个错误:
错误1#.

一运行,发现没反应,悲剧了,进入了HardFault错误
image25.png
遇到这种错误,最常见的就是 Memory越界访问或者堆栈溢出,由于Cube生成工程的时候没有修改堆栈,为默认值,于是将其改大,
image26.png
image27.png

果然这个问题立马迎刃而解了。

问题2#.

现在总算能运行了,但是还是出错了
image28.png

查看下时间,9.2秒,嗯,前面说了至少要10秒,所以这是迭代次数不够的错,将ITERATIONS由10000改为15000,
image29.png
再次测试:
image30.png

这次总算没出什么问题了,跑分结果1086.327,与官方结果基本相符。

本文PDF版: STM32F769-Coremark移植.pdf (1.68 MB, 下载次数: 83)

评分

参与人数 1 ST金币 +20 收起 理由
zero99 + 20

查看全部评分

收藏 2 评论29 发布时间:2016-12-3 02:38

举报

29个回答
Paderboy 回答时间:2016-12-9 09:21:01
Ljmp 发表于 2016-12-4 18:57
难道你不觉得有问题么,官方公布的STM21F746 的COREMARK 分数为1082,你这才1086,还是STM32F769 的 ...

这也是奇葩的逻辑。。。。 你到coremark官网看看。。。STM32F769DISC的coremark吧。。。。
风子 回答时间:2016-12-4 19:54:19
Ljmp 发表于 2016-12-4 18:57
难道你不觉得有问题么,官方公布的STM21F746 的COREMARK 分数为1082,你这才1086,还是STM32F769 的 ...

你这回复,,有点醉,,什么叫这才1086
Ljmp 回答时间:2016-12-12 23:23:42
Paderboy 发表于 2016-12-9 09:21
这也是奇葩的逻辑。。。。 你到coremark官网看看。。。STM32F769DISC的coremark吧。。。。  ...

, 其他的是你们,我就一路过的
liezhanxian39 回答时间:2016-12-3 03:40:53
挺好哇哇哇333333333
liezhanxian39 回答时间:2016-12-3 03:41:15
没见过  楼主你是在吗的
zengyi703-16313 回答时间:2016-12-3 05:43:09
谢楼主分享
Paderboy 回答时间:2016-12-3 07:55:08
顶起。。。
风子 回答时间:2016-12-3 11:13:12
liezhanxian39 发表于 2016-12-3 03:41
没见过  楼主你是在吗的

嗯?什么意思?
jackten 回答时间:2016-12-3 11:15:15
谢谢分享                    
peter001 回答时间:2016-12-3 18:15:21
很强,学习一下
netlhx 回答时间:2016-12-3 18:26:23
写得很详细,向风神学习
creep 回答时间:2016-12-3 20:41:08
好详细,移植宝典!
andypanfan 回答时间:2016-12-4 17:09:18
很强,学习一下
wolfgang 回答时间:2016-12-4 17:52:26
不错,挺好的文档。
Ljmp 回答时间:2016-12-4 18:57:01
难道你不觉得有问题么,官方公布的STM21F746 的COREMARK 分数为1082,你这才1086,还是STM32F769 的
zbber 回答时间:2016-12-4 21:46:07
谢谢楼主,支持分享
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版