coremark是专门用来测试MCU的CPU性能分数的开源库,我们拿到一块新的开发板后,都会迫切的想知道这块开发版上的MCU性能怎么样,这个时候就可以移植coremark来进行计算了,最后通过串口打印助手来查看具体的分数。 coremark移植分为两种方式,第一种是从github上进行下载,第二种是安装GorgonMeducer.perf_counter.2.4.0这个开发包。我们分别进行讲解和移植。 1。coremark源文件移植 首先进行coremark 官网的github连接 https://github.com/eembc/coremark 用git clone下载下来。 我们先建立一个串口测试工程,打开cubemx 选择外部时钟,配置好时钟树 根据原理图。配置串口引脚 根据原理图,配置好LED1 和LED2灯 然后配置代码生成选项 打开KEIL工程,进行串口打印printf重定向 添加头文件 #include "stdio.h" 测试一下串口功能 打开串口助手,115200波特率 串口已调通 然后进入下载好的coremark文件夹 我们只需要上面simple文件夹和下面的文件。把它们复制到刚刚建立好的KEIL工程中 然后添加到KEIL路劲中 同时工程中添加文件 编译一下,会报错,点开错误 需要修改宏定义 打开core_portme.c 修改成我这样 define NSECS_PER_SEC CLOCKS_PER_SECdefine CORETIMETYPE uint32_tdefine GETMYTIME(_t) (*_t = hal_systick_get())define MYTIMEDIFF(fin, ini) ((fin) - (ini))define TIMER_RES_DIVIDER 1define SAMPLE_TIME_IMPLEMENTATION 1define EE_TICKS_PER_SEC TICKS_PER_SECOND打开core_portme.h ifndef COMPILER_FLAGSdefine COMPILER_FLAGS "-O3" / "Please put compiler flags here (e.g. -o3)" /endififndef MEM_LOCATIONdefine MEM_LOCATION "STACK"endifdefine ITERATIONS 4000 // 这个值需要保证能够运行至少10秒,可以先写一个值,运行define MAIN_HAS_NOARGC 1 // coremark main不使用返回值添加hal_systick.h和hal_systick.c ifndef HALSYSTICKHdefine HALSYSTICKHinclude <stdint.h>include "main.h"define TICKS_PER_SECOND 1000void hal_systick_init(void); uint32_t hal_systick_get(void); endifinclude "hal_systick.h"volatile uint32_t g_tick_count = 0; void hal_systick_init(void) { SysTick_Config(SystemCoreClock / TICKS_PER_SECOND); } void SysTick_Handler(void) { g_tick_count += 1; } uint32_t hal_systick_get(void) { return g_tick_count; } 编译生成代码 我们将void SysTick_Handler(void);改为void SysTick_Handler1(void); 在中断里面添加 编译 还有两处错误 core_portme.h中,将 打开core_main.c将main修改为`coremark_main 再次编译,没有错误 在main.c文件中添加头文件 include "stdio.h"include "hal_systick.h"include "coremark.h"extern MAIN_RETURN_TYPE coremark_main(void); 打开启动文件 修改stack size和heap size 自己定义,太小不能运行coremark。 打开串口助手,进行调试 可以看到在优化等级为-O3时,分数为346。200450分 我们修改为-Omax等级 编译跑分 可以看到在优化等级为-O3时,分数为394.011032分。 不应该这么低 我们在main开头,使能I D cache缓存 可以看到串口助手 最终跑分1127。268628分 第二种方法采用安装库包来运行coremark 解压打开后,双击安装它 打开KEIL 使能勾选这三项即可 添加头文件 这种方法不需要怎么修改宏定义 只需要修改core_portme.h文件中 ifndef COMPILER_FLAGSdefine COMPILER_FLAGS "-Omax" / "Please put compiler flags here (e.g. -o3)" /endifdefine ITERATIONS 30000define MAIN_HAS_NOARGC 1进入main.c文件 只需要添加coremark_main(); 编译即可 最后测试分数是1127.582400分 两种方法测试的分数都一样,看个人所需进行选择即可。谢谢! |
汇编浮点库qfplib移植STM32F769I-DISCO开发板与硬件浮点运算性能测试对比
UDS诊断服务
【GUI板免费申请活动】【圣诞GUI】使用F746-DISO基于TouchGFX的圣诞树
刘氓兔的杂谈【001】-片上USB 高速PHY
【合集】STM32F7教程、资料大集合
基于STM32F746G-Discover的扩展电路板
F769 Discovery实现播放U盘音乐的播放器
STM32 VS Code Extension (在Ubuntu上开发STM32,ST官方vscode插件使用指南)
STM32F765@216MHz跑NES模拟器【代码】【视频】
基于STM32F7实现ADC软件触发+轮询采集