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

查看: 5995|回复: 29

[STM32F769-DISC] 【F769IDISCOVERY评测】Coremark移植教程与跑分测试

[复制链接]

33

主题

1243

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-3-9
发表于 2016-12-3 02:38:52 | 显示全部楼层 |阅读模式
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, 下载次数: 81)

评分

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

查看全部评分

<
回复

使用道具 举报

1

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2016-12-3
发表于 2016-12-3 03:40:53 | 显示全部楼层
挺好哇哇哇333333333
回复 支持 反对

使用道具 举报

1

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
2016-12-3
发表于 2016-12-3 03:41:15 | 显示全部楼层
没见过  楼主你是在吗的
回复 支持 反对

使用道具 举报

4

主题

484

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-8-12
发表于 2016-12-3 05:43:09 来自手机 | 显示全部楼层
谢楼主分享
回复 支持 反对

使用道具 举报

47

主题

3404

回帖

30

蝴蝶豆

版主

最后登录
2020-12-7
发表于 2016-12-3 07:55:08 | 显示全部楼层
顶起。。。
回复 支持 反对

使用道具 举报

33

主题

1243

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-3-9
 楼主| 发表于 2016-12-3 11:13:12 | 显示全部楼层
liezhanxian39 发表于 2016-12-3 03:41
没见过  楼主你是在吗的

嗯?什么意思?
回复 支持 反对

使用道具 举报

10

主题

693

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-6-15
发表于 2016-12-3 11:15:15 | 显示全部楼层
谢谢分享                    
回复 支持 反对

使用道具 举报

11

主题

1139

回帖

0

蝴蝶豆

金牌会员

最后登录
2020-7-10
发表于 2016-12-3 18:15:21 | 显示全部楼层
很强,学习一下
回复 支持 反对

使用道具 举报

107

主题

812

回帖

5

蝴蝶豆

论坛元老

最后登录
2019-8-28
发表于 2016-12-3 18:26:23 | 显示全部楼层
写得很详细,向风神学习
回复 支持 反对

使用道具 举报

60

主题

2051

回帖

31

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2016-12-3 20:41:08 | 显示全部楼层
好详细,移植宝典!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版