打印
[MM32硬件]

【MM32F5270开发板试用】CoreMark程序移植

[复制链接]
1321|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
铁血丹心LLLL|  楼主 | 2022-12-31 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言

CoreMark是一项测试处理器性能的基准测试。代码使用C语言写成,包含:列举,数学矩阵操作和状态及CRC等运算法则。目前CoreMark已迅速成为测量与比较处理器性能的业界标准基准测试。CoreMark的得分越高,意味着性能更高。在CoreMark的官网上可以大家可以看到各家处理器型号的CoreMark得分。也可以从CoreMark的官网上下载测试代码,亲自测一下自己手中的片子的性能。CoreMark官网的连接地址:http://www.eembc.org/coremark…。本文将一步步来介绍如何将下载的CoreMark测试代码移植到MM32F5270开发板上进行测试。

使用特权

评论回复
沙发
铁血丹心LLLL|  楼主 | 2022-12-31 13:49 | 只看该作者
移植前准备

在正式移植之前需要准备一个具有uart打印功能和1ms中断周期的定时器(使用systick也可以)。
我这里已经准备好了,并且也对uart进行了printf重定向。

使用特权

评论回复
板凳
铁血丹心LLLL|  楼主 | 2022-12-31 13:50 | 只看该作者
下载CoreMark源代码

CoreMark源代码可以点击上面的链接进入下载:

使用特权

评论回复
地板
铁血丹心LLLL|  楼主 | 2022-12-31 13:50 | 只看该作者

使用特权

评论回复
5
铁血丹心LLLL|  楼主 | 2022-12-31 13:51 | 只看该作者
开始移植

提取CoreMark源代码并添加工程
下载好的源代码有很多文件和文件夹,但是我们需要的只有很少的几个文件,如下:

使用特权

评论回复
6
铁血丹心LLLL|  楼主 | 2022-12-31 13:52 | 只看该作者
其中simple文件夹下面有两个文件需要用到。
所有需要的文件整理如下:
core_list_join.c
core_main.c
core_matrix.c
core_state.c
core_util.c
coremark.h
simple/core_portme.c
simple/core_portme.h

使用特权

评论回复
7
铁血丹心LLLL|  楼主 | 2022-12-31 13:52 | 只看该作者
将如上几个文件添加到工程中,其中core_portme.c和core_portme.h是需要进行修改的文件,我就放在app文件夹下,另外几个文件不需要做修改,就放在coremark文件夹下,同时工程配置中添加文件夹路径,配置好的工程如下:

使用特权

评论回复
8
铁血丹心LLLL|  楼主 | 2022-12-31 13:53 | 只看该作者

使用特权

评论回复
9
铁血丹心LLLL|  楼主 | 2022-12-31 13:54 | 只看该作者
配置CoreMark文件
我们已经添加了所有需要的文件,但现在程序还是不能正常运行,需要进行一些代码改造。

使用特权

评论回复
10
铁血丹心LLLL|  楼主 | 2022-12-31 13:54 | 只看该作者
添加硬件初始化代码
因为core_main.c里面有了一个main函数,所有我们要把我们工程自己的main函数删除,只保留一个main函数,同时需要把硬件初始化代码移到core_main.c的main函数里面去。main函数会先调用portable_init函数来进行相关的初始化,所有我们可以将硬件初始化代码放在portable_init函数的最开始,如下:

使用特权

评论回复
11
铁血丹心LLLL|  楼主 | 2022-12-31 13:55 | 只看该作者

使用特权

评论回复
12
铁血丹心LLLL|  楼主 | 2022-12-31 13:55 | 只看该作者

使用特权

评论回复
13
铁血丹心LLLL|  楼主 | 2022-12-31 13:56 | 只看该作者
修改计时相关代码
start_time/ stop_time/ get_time这几个函数,是coremark程序运行时计算程序运行时间所用。我这里使用TIM1进行计时,中断周期为1ms,重写start_time/ stop_time/ get_time这几个函数。

使用特权

评论回复
14
铁血丹心LLLL|  楼主 | 2022-12-31 13:57 | 只看该作者
void
start_time(void)
{
    //GETMYTIME(&start_time_val);
    coremark_cnt_clear();
    TIM_ClearCounterValue((TIM_Type *)TIM1);
    TIM_Start((TIM_Type *)TIM1);
}

void
stop_time(void)
{
    //GETMYTIME(&stop_time_val);
    TIM_Stop((TIM_Type *)TIM1)
}

CORE_TICKS
get_time(void)
{
    CORE_TICKS elapsed
        = (CORE_TICKS)get_cormark_cnt();
    return elapsed;
}

使用特权

评论回复
15
铁血丹心LLLL|  楼主 | 2022-12-31 13:58 | 只看该作者
注释掉不用的宏

使用特权

评论回复
16
铁血丹心LLLL|  楼主 | 2022-12-31 13:58 | 只看该作者
CoreMark运行配置
设置迭代次数
CoreMark要求程序运行的最短时间至少是10s, 根据使用的系统时钟等情况,可以在Core_portme.h中修改迭代次数。

使用特权

评论回复
17
铁血丹心LLLL|  楼主 | 2022-12-31 13:59 | 只看该作者
//增加迭代次数
    #define ITERATIONS 12000

使用特权

评论回复
18
铁血丹心LLLL|  楼主 | 2022-12-31 14:00 | 只看该作者
设置打印信息
根据具体所用的编译器版本,优化配置进行修改。

使用特权

评论回复
19
铁血丹心LLLL|  楼主 | 2022-12-31 14:01 | 只看该作者

使用特权

评论回复
20
铁血丹心LLLL|  楼主 | 2022-12-31 14:01 | 只看该作者
设置优化等级

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

488

帖子

1

粉丝