本帖最后由 goodbaiy 于 2020-3-22 23:04 编辑
本次我用NUCLEO-L552ZE-Q开发板跑一下CoreMark,看看MCU性能。 上一帖我有说过我使用的keil是5.23版本,这个没有达到CubeMX要求的最小版本,所以存在一些问题,由于有办法编译和下载程序,我也就没有升级。 参考网上一些帖子的内容(都是用的IAR),我进行了CoreMark的在keil的移植。 新建CubeMx工程,配置时钟及串口资源,上一帖有写到,这里不再赘述。由于开发板的外部高速晶振没有焊接,时钟只能用内部高速振荡器倍频获得110MHz时钟。 整个移植过程就是从官网下载最新的CoreMark测试源码(我把用到的文件存入了coremark_source文件夹),将源码加入到工程中。 添加路径: 调整优化级别:cube生成的工程默认是-O3级别;针对L5还增加了-Ofast级别(V5.23下测试两个差不多) 然后调整代码: 注释掉main.c开头的函数声明,把main()函数全部注释掉,函数声明的原函数前缀static删除,把刚刚注释掉的函数声明移到mian.h中(用extern取代static修饰),这样可以在core_portme.c中通过头文件包含调用这些函数。同时由于外部需要用到串口,所以把串口的句柄声明也一起放到main.h中。 小技巧:用户增加的部分,放到cube生成文件的xxx begin xx和xxx end xx对中,这样在cube重新生成的时候不会把我们自己增加的部分删除(cube偶尔有问题,会删除掉) 以上的修改,每次cube重新生成工程时都需要手动处理(部分内容找不到合适的注释对,所以每次生成都会被修改掉)。 Core_portme.c中加入头文件包含信息。 其他修改参见文档《如何将coremark程序移植到STM32上》,写的很详细(我把文件上传到了附件)。 工程移植、修改完成后,编译、下载测试。 第一次测试:由于L5没有打开icache,测试结果只有115分,如下: 这个分数异常的低;考虑时没有打开icache,所以重新配置工程,打开icache。重新调整代码,增加icache的部分,重复测试分数提高到了275分: 这个分数比上一次没开icache的高了好多,可见icache对于coremark有质的提升。但是看一下官方文档427,这个差了接近一倍呢?我当时就抓狂了,难道哪里没弄好?仔细检查,反复测试了几遍都是一样的结果,后来想会不会是IDE有问题呢,毕竟网上测试coremark的帖子都是用IAR的居多数,更何况我keil还是低于要求版本的5.23。那就找一个和谐版,测试一下吧。 我用的IAR 8.40符合cube的要求,安装后又简单学习了一下用法,开始测试IAR版本的coremark。 可是我的IAR也有问题,没有L5系列芯片。这就有点无奈了,还好有个M33内核的选项,索性这么用吧。 编译通过,下载到开发板,速度飞快,评分高,但是最后有错误(时间小于10秒,需要增加迭代次数),修改、编译、下载,等待十几秒,终于看到了好结果。跑到了427分,与官方得分一致。 至此,coremark测试ok。 可是我还不甘心,总觉得keil跟iar不能差这么多,所以下载了最新的KEIL MDK V5.29,这下更悲剧,编译、直接下载都没有问题,可是程序运行一段时间就挂了,根本看不到结果(keil和iar使用用的相同的源文件,iar都可用、keil就是不行)。我把源文件也上传,有板子的小伙伴可以自己试一下,看看究竟是什么问题。
cm_2_iar_mdk.rar
(791.92 KB)
|
我用keil编译,下载,串口没有任何数据显示
可以