我首次移植CoreMark,有不对的地方请大侠指教 参考: 给你的MCU跑个分?CoreMark性能测试与移植
学习笔记+如何将coremark程序移植到STM32上1、下载最新CoreMark CoreMark官网:https://www.eembc.org/coremark/ 代码仓库:github.com/eembc/coremark 移植只需要下图几个源文件,我没有像下图那样建立CoreMark,只是简单把所有*.c文件放Src目录中,*.h文件放Inc目录中  2、移植
(1)由于core_main.c文件中定义了main()函数,我把这里的main()函数改名为core_main(); core_portme.h中修改关于main函数的定义,针对裸机main函数无参数,修改宏:  工程中main.c文件中调用core_main();
 (2)在core_main.c和core_portme.c增加W806库文件引用
#include "wm_hal.h" (3)修改平台相关宏定义, 查看编译器的设置  根据编译器的设置修改core_portme.h中编译器版本、编译选项、储存位置的宏,这个仅作为输出结果,不影响实际测试性能。
注意:COMPILER_FLAGS的值不修改会编译不通过 
(4)时钟的修改 为测试最高速,在main()中设置 SystemClock_Config(CPU_CLK_240M); 查看wm_cpu.c文件,在SystemClock_Config()中已经对SysTick进行了初始化(执行了HAL_InitTick(TICK_INT_PRIORITY);) 其中TICK_INT_PRIORITY默认为1KHz。 同时定义了uint32_t HAL_GetTick(void); W806官方把一切准备好了,只需要把SysTick与coremark对接 core_portme.c文件中修改GETMYTIME(_t)宏定义,使它直接调用W806库中HAL_GetTick()函数,注意原单位为us,而HAL_GetTick()返回的是ms,所以需要*1000 #define GETMYTIME(_t) (*_t = HAL_GetTick()*1000)
(5)结果输出,这更简单,板子上已有串口芯片,Upgrade_Tools界面就可以看到输出结果
(6)还有一个关键参数——迭代次数,在core_portme.c文件中  CoreMark要求的最短测试时间为10s,若测试时间低于10s则会报错,见下图:

我在文件中新建一个宏定义 #define ITERATIONS 6000 //定义迭代次数,修改次数使运行时间大于10s
3、走起 
最终结果:573.56分
再附上STM32系列MCU的coremark分值,供大家参考
因为文章是事后归纳写的成的,可能有遗留,附上原代码供大家参考和指教:
|