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移植過程記錄