你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

coremark移植到STM32F769I-DISCO开发板的两种方法

[复制链接]
秋刀鱼的 发布时间:2024-12-27 12:37

coremark是专门用来测试MCU的CPU性能分数的开源库,我们拿到一块新的开发板后,都会迫切的想知道这块开发版上的MCU性能怎么样,这个时候就可以移植coremark来进行计算了,最后通过串口打印助手来查看具体的分数。

coremark移植分为两种方式,第一种是从github上进行下载,第二种是安装GorgonMeducer.perf_counter.2.4.0这个开发包。我们分别进行讲解和移植。

1。coremark源文件移植

首先进行coremark 官网的github连接

https://github.com/eembc/coremark

image.png

image.png

用git clone下载下来。

我们先建立一个串口测试工程,打开cubemx

image.png

选择外部时钟,配置好时钟树

image.png

image.png

根据原理图。配置串口引脚

image.png

image.png

根据原理图,配置好LED1 和LED2灯

image.png

image.png

然后配置代码生成选项

image.png

image.png

image.png

打开KEIL工程,进行串口打印printf重定向

image.png

添加头文件 #include "stdio.h"

测试一下串口功能

image.png

打开串口助手,115200波特率

image.png

串口已调通

然后进入下载好的coremark文件夹

image.png

我们只需要上面simple文件夹和下面的文件。把它们复制到刚刚建立好的KEIL工程中

然后添加到KEIL路劲中

image.png

同时工程中添加文件

image.png

编译一下,会报错,点开错误

image.png

需要修改宏定义

打开core_portme.c

修改成我这样

define NSECS_PER_SEC CLOCKS_PER_SEC

define CORETIMETYPE uint32_t

define GETMYTIME(_t) (*_t = hal_systick_get())

define MYTIMEDIFF(fin, ini) ((fin) - (ini))

define TIMER_RES_DIVIDER 1

define SAMPLE_TIME_IMPLEMENTATION 1

define EE_TICKS_PER_SEC TICKS_PER_SECOND

image.png

打开core_portme.h

ifndef COMPILER_FLAGS

define COMPILER_FLAGS "-O3" / "Please put compiler flags here (e.g. -o3)" /

endif

ifndef MEM_LOCATION

define MEM_LOCATION "STACK"

endif

define ITERATIONS 4000 // 这个值需要保证能够运行至少10秒,可以先写一个值,运行

define MAIN_HAS_NOARGC 1 // coremark main不使用返回值

image.png

添加hal_systick.h和hal_systick.c

ifndef HALSYSTICKH

define HALSYSTICKH

include <stdint.h>

include "main.h"

define TICKS_PER_SECOND 1000

void hal_systick_init(void); uint32_t hal_systick_get(void);

endif

include "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; }

编译生成代码

image.png

我们将void SysTick_Handler(void);改为void SysTick_Handler1(void);

image.png

在中断里面添加

image.png

编译

image.png

还有两处错误

core_portme.h中,将MAIN_HAS_NOARGC宏定义代码行修改为1

image.png

打开core_main.c将main修改为`coremark_main

image.png

image.png

再次编译,没有错误

image.png

在main.c文件中添加头文件

include "stdio.h"

include "hal_systick.h"

include "coremark.h"

extern MAIN_RETURN_TYPE coremark_main(void);

image.png

image.png

image.png

打开启动文件

image.png

修改stack size和heap size

自己定义,太小不能运行coremark。

打开串口助手,进行调试

image.png

可以看到在优化等级为-O3时,分数为346。200450分

我们修改为-Omax等级

image.png

image.png

编译跑分

image.png

可以看到在优化等级为-O3时,分数为394.011032分。

不应该这么低

image.png

我们在main开头,使能I D cache缓存

可以看到串口助手

image.png

最终跑分1127。268628分

第二种方法采用安装库包来运行coremark

image.png

解压打开后,双击安装它

打开KEIL

image.png

image.png

使能勾选这三项即可

添加头文件

image.png

这种方法不需要怎么修改宏定义

只需要修改core_portme.h文件中

ifndef COMPILER_FLAGS

define COMPILER_FLAGS "-Omax" / "Please put compiler flags here (e.g. -o3)" /

endif

define ITERATIONS 30000

define MAIN_HAS_NOARGC 1

image.png

进入main.c文件

image.png

只需要添加coremark_main();

编译即可

image.png

最后测试分数是1127.582400分

两种方法测试的分数都一样,看个人所需进行选择即可。谢谢!

image.png
收藏 评论0 发布时间:2024-12-27 12:37

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版