查看: 2759|回复: 0

[原创] [正点原子 号令者RT1052试用]4、移植Coremark时发现的问题

[复制链接]
  • TA的每日心情
    奋斗
    2017-6-6 13:23
  • 签到天数: 7 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2018-7-24 15:06:30 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 wolfgang2015 于 2018-7-24 17:18 编辑

    终于用正点原子的库跑出Coremark得分
    47.jpg
    分值还不错,能达到(Keil比IAR编译器要少几个百分点)
    CoreMark 1.0 : 2452.667409 / Please putcompiler version here (e.g. gcc 4.1) -O3 -Optimize for Time / STACK


    在上次用用SysTick 跑出来一个偏离很远的Coremark分值后,将Systick用PIT替换;
    具体使用PIT的方法,可参考“号令者RT1052光盘资料(A盘)\4,程序源码\2,标准例程-库函数版本\实验8 PIT定时器中断实验”进行设置。
    CoreMark的移植暂不说,就本次移植发现的问题,希望各位在应用中注意。

    使用正点原子的库函数版本移植Cormark的内容时,需要对部分代码作调整,否则不能得到正确的CoreMark跑分:

    1、在void RT1052_Clock_Init(void) 函数中,SystemCoreClockUpdate()函数之前增加以下代码设定PIT系统时钟配置参数
    1. /* Configure PIT divider */   
    2. CLOCK_SetMux(kCLOCK_PerclkMux, 1U); /* Set PERCLK_CLK source to OSC_CLK*/
    3. CLOCK_SetDiv(kCLOCK_PerclkDiv, 0U); /* Set PERCLK_CLK divider to 1 */
    4. SystemCoreClockUpdate();
    复制代码
    这里使用晶振的24MHz,直接配置给PIT作为时钟源。 不分频提供给PIT使用,24MHz。确保Coremark的跑分时间足够。

    2、NXP官方在以下常量的类型定义中,是定义了src的内容,将Sys.c文件中以下定义的常量末尾增加.src的内容
    1. const clock_arm_pll_config_t armPllConfig =         
    2. {
    3.         //Fout=Fin*div_selcet/2=24*100/2=1200Mhz;
    4.         .loopDivider = 100,               
    5.         .src = 0,
    6. };

    7. const clock_sys_pll_config_t sysPllConfig =
    8. {
    9.     //Fout = Fin * ( 20 + loopDivider*2 + numerator / denominator) = 24*(20+1*2+0/1)=24*22=528MHz
    10.     .loopDivider = 1,
    11.     .numerator = 0,
    12.     .denominator = 1,
    13.     .src = 0,
    14. };

    15. const clock_usb_pll_config_t usb1PllConfig =
    16. {
    17.         //0: Fout=Fref*20=24*20=480M;
    18.         //1: Fout=Fref*22=24*22=528M
    19.         .loopDivider = 0,
    20.        .src = 0,  
    复制代码
    以上结构体均要增加.src=0的内容,若不增加以上结构,即便代码相同,Coremark跑分也差别很大。似乎相关参数没有正确被设定,达不到设定的运行速度,会导致跑分大大降低。

    追究这几个类型定义:clock_arm_pll_config_t 、clock_sys_pll_config_tclock_usb_pll_config_t
    官方给出的结构定义中,均包含 .src部分,常量不出初始化这些部分的值,结构体的数字没有得到赋值,默认的会出现一些不可预见的错误。因此最好将结构体的值初始化完整。









    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2025-1-26 19:02 , Processed in 0.126130 second(s), 16 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.