查看: 4262|回复: 3

GD32F450——Coremark跑分

[复制链接]
  • TA的每日心情
    奋斗
    2023-6-27 14:09
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-4-30 14:51:47 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 9robot 于 2017-4-30 14:56 编辑

        GD32F450性能很强悍,但是到底有多强呢?今天就试一试,拿Coremark跑个分呗。简单说Coremark的移植过程,之前在STM32F7上移植过,这次就很快完成移植了。
        1、首先,选择一个完整的模板,主频设定在200M,把串口调试好,因为之后是采用出口输出跑分结果的。小红板主芯片的PD8、PD9和USB转TTL的芯片连接,可以向电脑发送数据,这里选择了去配置USART2,并重定向了printf函数,可以向串口助手打印数据,简化了结果输出。
        2、下载好Coremark文件,可以直接去官网下载
        3、将模板的启动文件改一下,把初始化时的堆栈改大一些,否则会出现问题,默认的都是0X00000400,这里我改成了0X00002000。
    1.PNG


         4、在工程中新建Coremark文件夹,将一下文件复制进去
    2.PNG


         5、在工程里添加文件,并包含头文件路径
    3.PNG


    4.PNG


         6、添加初始化代码
         1) portable_init 函数
         Core_portme.c 中的 portable_init 函数在 Core_main.c 的 main 函数中首先被调用, 平台的初始化的函数(时钟, GPIO, 串
    口) 可以放在这里。 将Main 函数中的初始化代码复制到 portable_init 函数中。
    1. void portable_init(core_portable *p, int *argc, char *argv[])
    2. {
    3.         systick_config();
    4.     //led_init();
    5.         
    6.           gd_eval_com_init();
    7.    

    8.         ee_printf("it is OK\r\n");
    9.         
    10.         
    11.         if (sizeof(ee_ptr_int) != sizeof(ee_u8 *)) {
    12.                 ee_printf("ERROR! Please define ee_ptr_int to a type that holds a pointer!\n");
    13.         }
    14.         if (sizeof(ee_u32) != 4) {
    15.                 ee_printf("ERROR! Please define ee_u32 to a 32b unsigned type!\n");
    16.         }
    17.         p->portable_id=1;
    18. }
    复制代码
    添加头文件
    1. #include <inttypes.h>
    2. #include "gd32f4xx.h"
    3. #include "systick.h"
    4. #include <stdio.h>
    5. #include "usart.h"
    复制代码
    删除main函数,因为 Core_main.c中已经有了main函数

         2)修改计时相关代码
         start_time/ stop_time/ get_time 这几个函数,是 coremark 程序运行时计算程序运行时间所用。 这里使用 system tick 进行计
    时,
    system tick 配置为 1ms 的中断间隔。 system tick 中断函数中更新 Tick 的值,每进一次中断加 1。 所以还需要修改
    system tick 的中断处理函数。
    1)在 Core_portme.c 中按下表找到需要修改的地方, 并按表格的内容进行修改:
    1. void start_time(void) {
    2.         //GETMYTIME(&start_time_val );
    3.         Tick=0;
    4.         SysTick_Config(SystemCoreClock/1000);
    5.         
    6. }

    复制代码
    1. void stop_time(void) {
    2.         //GETMYTIME(&stop_time_val );

    3.         SysTick->CTRL&=SysTick_Counter_Disable;
    4.         SysTick->VAL=SysTick_Counter_Clear;
    5.         
    6. }
    复制代码
    1. CORE_TICKS get_time(void) {
    2. //        CORE_TICKS elapsed=(CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
    3. //        return elapsed;
    4.         CORE_TICKS elapsed=(CORE_TICKS)Tick;
    5.         return elapsed;
    6.         
    7.         
    8. }
    复制代码
    添加变量

    #define SysTick_Counter_Disable   ((uint32_t)0xFFFFFFFE)
    #define SysTick_Counter_Enable    ((uint32_t)0x00000001)
    #define SysTick_Counter_Clear     ((uint32_t)0x00000000)
    __IO uint32_t Tick;

          7、修改systick中断函数
    1. void delay_decrement(void)
    2. {
    3.                 extern __IO uint32_t Tick;
    4.    
    5.           Tick++;
    6.     if (0U != delay){
    7.         delay--;
    8.     }
    9.         
    10. }
    复制代码
    8、CoreMark 运行配置
    1) 设置迭代次数
    CoreMark 要求程序运行的最短时间至少是 10s, 根据使用的系统时钟等情况,可以在 Core_portme.h 中修改迭代次数。
    #define ITERATIONS 12000
    2) 设置打印信息
    根据具体所用的编译器版本,优化配置进行修改。

    3) 修改优化等级。将优化等级设定到最高
    5.PNG


    9、编译没有问题后下载到板子上,打开串口助手,按下复位按键,等一会就可以看到跑分结果
    youhua2.PNG


           经过优化后GD32F450最高可以跑521分,如果不优化的话,基本只能到260多,因为我用的是MKD5,跑分结果应该会比IAR低一些,STM32F407的官方数据是在168M主频时可以跑566分,应该是在IAR环境下的结果;STM32F413在100M主频时可以跑339分,应该也是IAR环境下的结果,在论坛里查了一下,采用MDK跑分,STM32F413基本在260分左右。简单算了一下,GD32如果跑100M,应该也在260左右,(实际将主频降到120M后,分数为310),GD32F450的性能与STM32的大致相当,毕竟都是Cortex—M4的内核,但是GD32F450的主频更高,性能自然会提升一部分。


    GD32F450_Coremark.zip

    332.45 KB, 下载次数: 34

    如何将coremark程序移植到STM32上.pdf

    1.12 MB, 下载次数: 43

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-2-14 12:16
  • 签到天数: 827 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-4-30 22:33:55 | 显示全部楼层
    谢谢分享学习一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-7-30 11:40
  • 签到天数: 1792 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-5-2 09:31:11 | 显示全部楼层
    下载看看;,,,,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-7-13 11:08
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-5-4 13:47:28 | 显示全部楼层
    mark mark mark mark
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 06:22 , Processed in 0.136869 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.