0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于极海APM32E103 MCU的CoreMark测试方法

Geehy极海半导体 ? 来源:21ic论坛极海半导体专区 ? 2025-06-12 09:42 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

均转载自21ic论坛极海半导体专区

CoreMark是专门用于测试处理器内核性能的基准测试程序,测试的内容有:列表处理(查找和排序)、矩阵操作(常见的矩阵操作)、状态机(确定输入流是否包含有效数字)和CRC(循环冗余检查),通过CoreMark跑分可以了解到MCU的算力。下面以APM32E103芯片和Keil为例,介绍一下如何在APM32上面运行CoraMark测试。CoreMark需要定时器用于计时,还需要用串口来打印输出测试结果。

1、获取相关代码

在极海官网可以下载SDK:

https://www.geehy.com/uploads/tool/APM32E10x_SDK_V1.2.zip

打开 “APM32E10x_SDK_V1.1ExamplesUSARTUSART_PrintfProjectMDKUSART_Printf.uvprojx”,这个工程已经有串口和滴答定时器的初始化,便于修改。

在CoreMark的GitHub下载库:

https://github.com/eembc/coremark.git

*网速太慢的话可以在国内Gitee下载:

https://gitee.com/ssri-mirrors/coremark.git

2、实现串口打印printf

先初始化串口,直接用SDK本来的代码就行。

然后重定义fputc(),以便能通过printf()输出信息到串口调试助手。

struct __FILE

{

int handle;

};

FILE __stdout;

int fputc(int ch, FILE *f)

{

while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);

USART_TxData(USART1, ch);

return ch;

}

3、实现计时函数GETMYTIME

使用滴答定时器或者普通定时器都可以,这里以滴答定时器为例,每隔10ms中断一次。

SysTick_Config(SystemCoreClock / 100);

在中断服务中需要一个全局变量进行10毫秒级计时。

void SysTick_Handler(void)

{

tick++;

}

4、添加CoreMark源代码

将下载的CoreMark库解压到工程目录下,在Keil工程中添加这几个文件,其中 core_portme.c 在文件夹simple里面。

df7832de-42b7-11f0-b715-92fbcf53809c.png

还要在工程设置中添加相关头文件的路径

e041f844-42b7-11f0-b715-92fbcf53809c.png

把 core_main.c 中的 main(int argc, char *argv[]) 改为 coremark_main(int argc, char *argv[]) 以免编译报错。

MAIN_RETURN_TYPE

coremark_main(int argc, char *argv[])

在真正的int main()函数中调用 coremark_main 函数。

coremark_main(0,NULL); //正常开始运行测试算法

5、配置CoreMark

完成以上步骤后编译会报两个错:

....coremark-maincore_main.c(383): error: #20: identifier "FLAGS_STR" is undefined

....coremark-mainsimplecore_portme.c(38): error: #20: identifier "ITERATIONS" is undefined

第1个错误是说没定义 FLAGS_STR 这个字符串,这个是用来编译优化等级的,在 core_portme.h 添加这个字符串。

#define COMPILER_FLAGS "Level 0"

第2个错误是说没定义 ITERATIONS 这个值,这个值决定了CoreMark算法执行的次数,对于性能越高的MCU这个值应该越大,在core_portme.c中添加这个宏定义, 这里先设个1000,后面根据需要再调整。

#define ITERATIONS 1000

接下来要配置关于时间的代码,还是core_portme.c这个文件,将之前中断服务函数计数的变量赋给 *_t ,同时也要包含tick变量的声明。

#define NSECS_PER_SEC CLOCKS_PER_SEC

#define CORETIMETYPE clock_t

#define GETMYTIME(_t) (*_t = tick )

注意 CLOCKS_PER_SEC 这个宏,它表示每秒的时钟数,也就是一秒内tick计数的增加量,如果tick每隔10ms加一,那么CLOCKS_PER_SEC应该等于100;如果tick每隔1ms加一,那么CLOCKS_PER_SEC应该等于1000;

6、增加栈的大小

CoreMark运行时需要较大的栈空间,默认栈大小不够,需要改大。

打开CMSIS栏中的启动文件 startup_apm32e10x_hd.s ,把栈Stack_Size 增加到 2KB 。

Stack_Size EQU 0x00000800

7、下载程序并执行

编译并下载程序,等待10多秒后串口输出测试结果。

有时优化等级提高了,或者换了更强的MCU测试,会出现算法执行时间小于10秒的提示:

e0513854-42b7-11f0-b715-92fbcf53809c.png

这时只需要把 ITERATIONS 改大就行了。

#define ITERATIONS 2000

把优化等级提到最高,测得CoreMark 1.0跑分为139.958。

e065bcd4-42b7-11f0-b715-92fbcf53809c.png

以上就是用CoreMark库对APM32E103进行性能测试的方法及步骤,对其他芯片的测试方法也是大同小异。

注:文章作者在原帖中提供了例程文件,有需要请至原文21ic论坛下载

原文地址:https://bbs.21ic.com/icview-3331250-1-1.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19935

    浏览量

    236193
  • mcu
    mcu
    +关注

    关注

    146

    文章

    18027

    浏览量

    368995
  • 测试
    +关注

    关注

    8

    文章

    5737

    浏览量

    129115
  • 定时器
    +关注

    关注

    23

    文章

    3302

    浏览量

    119371
  • 极海半导体
    +关注

    关注

    0

    文章

    166

    浏览量

    4825

原文标题:APM32芯得 EP.56 | 基于APM32E103的CoreMark测试方法

文章出处:【微信号:geehysemi,微信公众号:Geehy极海半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新品发布丨半导体推出工业级标准型APM32S103系列MCU

    半导体最新宣布推出,基于32位Arm Cortex-M3内核的 工业级标准型 APM32S103系列MCU 。该系列新品作为APM32F103
    的头像 发表于 12-16 18:24 ?2606次阅读

    推出APM32A全系列车规级MCU

    ? 宣布推出具有高效CPU处理性能、增强型存储空间、以及丰富连接功能的 APM32A 系列车规级MCU,以有效满足汽车电子多样化通信与车身控制应用开发需求,可广泛应用于车身控制、安
    发表于 02-02 14:47 ?1340次阅读
    <b class='flag-5'>极</b><b class='flag-5'>海</b>推出<b class='flag-5'>APM</b>32A全系列车规级<b class='flag-5'>MCU</b>

    推出APM32A系列车规级MCU芯片

    宣布推出具有高效CPU处理性能、增强型存储空间、以及丰富连接功能的APM32A系列车规级MCU,以有效满足汽车电子多样化通信与车身控制应用开发需求,可广泛应用于车身控制、安全系统、
    发表于 02-21 14:21

    APM32F103RCT7通过AEC-Q100车规认证

    APM32F103RCT7 MCU芯片经过广电计量等第三方权威机构检测,顺利通过AEC-Q100车规认证。
    发表于 02-07 10:38 ?2818次阅读
    <b class='flag-5'>极</b><b class='flag-5'>海</b><b class='flag-5'>APM32F103</b>RCT7通过AEC-Q100车规认证

    Flasher在线烧录器全面支持APM32系列MCU

    半导体常务副总经理王远学表示:“非常有幸能与SEGGER达成合作,目前APM32系列MCU
    的头像 发表于 09-08 11:10 ?2653次阅读

    半导体APM32E103/F072系列MCU顺利通过IEC 60730功能安全认证

    近日,半导体APM32E103/APM32F072系列MCU,顺利通过IEC 60730功能安全认证,并提供符合B类标准的软件安全库,有
    发表于 09-29 14:17 ?1534次阅读

    APM32F407xG移植coremark教程

    APM32F407xG移植coremark教程
    发表于 09-29 15:51 ?1次下载

    APM32E103xCxE数据手册

    APM32E103xCxE数据手册
    发表于 11-09 21:03 ?2次下载
    <b class='flag-5'>APM32E103</b>xCxE数据手册

    APM32E103VET6S数据手册

    APM32E103VET6S数据手册
    发表于 11-09 21:03 ?13次下载
    <b class='flag-5'>APM32E103</b>VET6S数据手册

    APM32E103VET6_LSE_RTC不走时

    APM32E103VET6_LSE_RTC不走时
    发表于 11-09 21:03 ?2次下载
    <b class='flag-5'>APM32E103</b>VET6_LSE_RTC不走时

    APM32E103ZE EVAL 原理图

    APM32E103ZE EVAL 原理图
    发表于 11-09 21:04 ?0次下载
    <b class='flag-5'>APM32E103</b>ZE EVAL 原理图

    喜报频传!APM32工业级/车规级MCU产品接连荣获三项大奖

    半导体喜报频传接连荣获三项大奖。半导体“工业级高安全MCU APM32F415”、 “工
    发表于 11-21 15:17 ?842次阅读

    推出首款电机控制专用芯片APM32F035系列MCU

    宣布正式推出首款高性能、高可靠性、高性价比的电机控制专用芯片—APM32F035系列MCU,覆盖多种电机应用。
    的头像 发表于 07-28 17:13 ?2123次阅读
    <b class='flag-5'>极</b><b class='flag-5'>海</b>推出首款电机控制专用芯片<b class='flag-5'>APM</b>32F035系列<b class='flag-5'>MCU</b>

    基于半导体APM32F407系列MCU的伺服控制器应用方案

    基于半导体APM32F407系列MCU的伺服控制器应用方案
    的头像 发表于 09-19 16:48 ?1659次阅读
    基于<b class='flag-5'>极</b><b class='flag-5'>海</b>半导体<b class='flag-5'>APM</b>32F407系列<b class='flag-5'>MCU</b>的伺服控制器应用方案

    APM32F072xBT7硬件兼容ST电动车应用方案mcu

    APM32F072xBT7硬件兼容ST电动车应用方案MCU 随着电动车市场的不断发展,对于电动车控制器的要求也越来越高。而作为电动车控制器的核心部件,
    的头像 发表于 03-04 21:30 ?983次阅读