打印
[APM32F1]

coremark——APM32F103xE移植coremark

[复制链接]
983|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zjh20070904 于 2022-5-13 11:02 编辑

#技术资源#
(涉及到的截图、代码见附件)
主要记录了在APM32F103xE上移植coremark的过程。
1 coremark网址
在这可以查到相关产品的coremark数值。




2 下载源码
最近网址无法打开,附件提供了网上其它方式下载的代码。

3 主要工作过程
通过STK定时器,计算指定算法的运行次数的时间,依据此计算出跑分。
需要初始化的硬件有:USART实现printfSTK初始化、栈设置合理、编写STK中断处理函数,移植、修改coremark源码;配置好编译环境,依据每个处理器的运行速度,调整运行算法的次数,确保总的运行时间大于10
编译下载运行,即可获得测试结果。

4 移植代码、修改步骤4.1 添加coremark源代码至Keil工程中



添加至Keil工程中


4.2 配置Keil工程,设置好头文件包含路径(以个人定义的路径为准)

4.3 main.c中添加头文件、编译4.3.1 包含的头文件如下
4.3.2 编译后报错及处理方案4.3.2.1 缺少定义

core_portme.h中添加对ITERATIONS的定义,确保运行算法的总时间超过10s,刚开始时,可以设置该参数小点,然后逐步增大,如果一开始就设置很大的话,会等待较长的运行时间才会有运行结果。




4.3.2.2 重复定义main的错误
因为在core_main.c中定义了main,会出现重复定义的错误。


为了方面将运行跑分的函数当做函数调用,处理方案如下:


同时在coremark.h中声明函数,调用时编译不报警告。


mian.c中定义变量,方便调用函数CoreMark()


4.4 编写串口初始化代码,实现printf
//重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
     USART_TxData(USART1,(char) ch);
     while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);
     return(ch);
}

//重定向c库函数scanf到串口,重写向后可使用scanfgetchar等函数
int fgetc(FILE *f)
{
     while(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET);
     return(int)USART_RxData(USART1);
}


//重定向c库函数printf到串口,重定向后可使用printf函数
int fputc(int ch, FILE *f)
{
     USART_TxData(USART1,(char) ch);
     while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);

     if(ch=='\n')
     {
         USART_TxData(USART1,'\r');
         while(USART_ReadStatusFlag(USART1,USART_FLAG_TXBE) == RESET);
     }
     return(ch);
}

//重定向c库函数scanf到串口,重写向后可使用scanfgetchar等函数
int fgetc(FILE *f)
{
     while(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET);
     return(int)USART_RxData(USART1);
}


int main(void)
{
     intargc;
     char*argv[]={"1","2"};

   GPIO_Config_T GPIO_ConfigStruct;
    USART_Config_TUSART_ConfigStruct;

   RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA |RCM_APB2_PERIPH_USART1));
   GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
   GPIO_ConfigStruct.pin = GPIO_PIN_9;
   GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
   GPIO_Config(GPIOA, &GPIO_ConfigStruct);

   USART_ConfigStruct.baudRate = 115200;
   USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
   USART_ConfigStruct.mode = USART_MODE_TX;
   USART_ConfigStruct.parity = USART_PARITY_NONE;
   USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
   USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
   USART_Config(USART1, &USART_ConfigStruct);
   USART_Enable(USART1);

     CoreMark(argc,argv);

     while(1);
}


4.5 定义启动、停止、获取时间的变量、函数4.5.1 core_portme.h文件添加配置STK所需的头文件,这里直接包含amp32f10x.h

4.5.2 定义全局变量gTick

4.5.3 重新定义start_time(),初始化STK,实现每ms产生一次中断

4.5.4 重新定义stop_time()、get_time()

4.5.5 添加 #define EE_TICKS_PER_SEC 1000
gTick1ms产生一次中断、计数,将EE_TICKS_PER_SEC定义为1000可将毫秒时间转为秒单位,注释掉部分代码


4.5.6 core_portme.h中声明gTick变量

4.5.7 apm32f10x_int.c中的SysTick_Handler中添加gTick++

4.6 增加一行代码,可通过串口显示已运行。

4.7 编译,下载运行,调试时会出现

解决方案是:增大栈空间,这里有些偷懒,理论占用多大空间可分析代码


4.8 再次编译运行,串口显示较乱,缺少回车符

4.8.1 解决方案一:通过软件增加’\r’

4.8.1.1 方法二:通过设置串口软件增加’\r’
各家软件设置上存在差异,这里不作尝试了。

4.9 再次编译、运行结果如下
4.10 注意点
算法运行的时间需要大于10s,如果小于10s会出现如下错误:


需要调整的参数如下:


5 问题
同一颗芯片,MCU的运行状态、编译环境状态、代码运行位置都会影响coremark数值,后续会对比分析哪些参数会影响coremark数值。

APM32F10x_SDK_V1.6_coremark.zip (5.66 MB)
coremark_source.zip (465.97 KB)



coremark——APM32F103xE移植coremark.pdf

1.97 MB

使用特权

评论回复
沙发
strang| | 2022-5-15 21:44 | 只看该作者
感谢分享,测试了一下跑分结果:

QQ截图20220515214326.jpg (367.73 KB )

QQ截图20220515214326.jpg

使用特权

评论回复
板凳
zerorobert| | 2022-6-2 09:30 | 只看该作者
多大的内存呢?

使用特权

评论回复
地板
quickman| | 2022-6-2 11:09 | 只看该作者
coremark如何评价的?

使用特权

评论回复
5
earlmax| | 2022-6-2 15:58 | 只看该作者
APM32F103xE性能还可以 ?

使用特权

评论回复
6
uptown| | 2022-6-2 16:44 | 只看该作者
这个F103差不多吧。  

使用特权

评论回复
7
chenqianqian| | 2022-6-7 18:41 | 只看该作者
这个测评数据意义何为?

使用特权

评论回复
8
zjh20070904|  楼主 | 2022-6-13 19:18 | 只看该作者
类似安兔兔跑分一样,代表MCU某一方面的性能,这个是中文的网站,http://mcu.eetrend.com/tag/coremark

使用特权

评论回复
9
zjh20070904|  楼主 | 2022-6-13 19:20 | 只看该作者
这个是中文网站,http://mcu.eetrend.com/tag/coremark
代表MCU某一方面的性能,类似手机的安兔兔跑分一样

使用特权

评论回复
10
uptown| | 2022-7-8 16:10 | 只看该作者
程序跑飞是怎么回事

使用特权

评论回复
11
MessageRing| | 2022-10-4 21:00 | 只看该作者
和f103差不多吗?

使用特权

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

本版积分规则

认证:极海半导体
简介:珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。

29

主题

68

帖子

0

粉丝