CMS32M65xx/67xx系列CoreMark跑分测试
1、参考资料准备
1.1、STM32官方跑分链接
1.2、官网链接
- 官方移植文档,如下所示,点击红框处-移植文档: A new whitepaper and video explain how to port CoreMark-Pro to bare-metal
1.3、测试软件git下载链接
2、代码移植
在工程中新建CoreMark文件夹,将Git下载的coremark-main文件解压,从coremark-main文件夹中拷贝文件
core_list_join.c
core_main.c
core_matrix.c
core_state.c
core_util.c
coremark.h
simple/core_portme.c(simple文件夹下)
simple/core_portme.h(simple文件夹下)
将上述文件拷贝到新建的文件夹中。
主要注意配置时间基数、官方以及参考都是使用系统时钟(SysTick),当然也可以使用定时器来做时基
在core_portme.c文件夹中,做以下修改#define EE_TICKS_PER_SEC (1000)
该定义与定时器时基有关。定时器设定1ms周期,配置为1000。
//#define NSECS_PER_SEC CLOCKS_PER_SEC
//#define CORETIMETYPE clock_t
//#define GETMYTIME(_t) (*_t = clock())
//#define MYTIMEDIFF(fin, ini) ((fin) - (ini))
//#define TIMER_RES_DIVIDER 1
//#define SAMPLE_TIME_IMPLEMENTATION 1
//#define EE_TICKS_PER_SEC (NSECS_PER_SEC / TIMER_RES_DIVIDER)
#include "CMS32M6510.h"
#define CORETIMETYPE uint32_t
#define EE_TICKS_PER_SEC (1000) //和定时器配置相关
void
start_time(void)
{
// GETMYTIME(&start_time_val);
Time0_cnt=0;
TMR_Start(TMR0);
}
void
stop_time(void)
{
// GETMYTIME(&stop_time_val);
TMR_Stop(TMR0);
}
CORE_TICKS
get_time(void)
{
// CORE_TICKS elapsed
// = (CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
// return elapsed;
CORE_TICKS elapsed = Time0_cnt;
return elapsed;
}
在core_portme.h文件夹中,做以下修改##define MAIN_HAS_NOARGC 1
该定义与coremark_main函数入口参数有关。#define ITERATIONS 1000
该定义根据MCU来修改,保证计算时间否则会出现Errors detected
的情况。
#ifndef MAIN_HAS_NOARGC
#define MAIN_HAS_NOARGC 1
#endif
#define ITERATIONS 1000
3、跑分结果
3.1、65xx跑分结果
3.2、67xx跑分结果
65xx-CoreMark跑分工程代码
67xx-CoreMark跑分工程代码
4、参考文档
参考文章1:51CTO-看看你的MCU能跑多少分?极简教程教会你测试MCU性能!
参考文章2:CSDN-CoreMark移植过程记录