This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

程序测试问题




各位专家好!

我在程序测试的过程中遇到一些问题,还请大家帮忙指正一下!

1、程序中定义了结构体指针:CSL_Emif4fRegs * DDR_Regs = (CSL_Emif4fRegs*) CSL_DDR3_EMIF_CONFIG_REGS;

      其中CSL头文件中定义了:#define  CSL_DDR3_EMIF_CONFIG_REGS    (0x21000000)     但单步运行结果如下:

    

    从图中可以看出结构体指针DDR_Regs是赋予了初始地址的,但为什么其内部成员却没有地址分配呢???因为没有分配地址,各成员的赋值也没有成功。

2、遇到与第一个问题相似的问题,就是在CSL头文件里已经定义了一个结构体指针:#define hBootCfg     ((CSL_BootcfgRegs*)CSL_BOOT_CFG_REGS),

       且有定义: #define CSL_BOOT_CFG_REGS       (0x02620000),但在执行:

          CSL_IDEF_INLINE void CSL_BootCfgUnlockKicker (void)
             {
                     hBootCfg->KICK_REG0 = 0x83e70b13;
                     hBootCfg->KICK_REG1 = 0x95a4f1e0;

                    return;
             }

       发现 hBootCfg->KICK_REG0与hBootCfg->KICK_REG1均没有被赋值,不知道是什么原因???单步运行截图如下:

     请各位多多指点!

     谢谢!

 

 

  • 您好!

    第2个问题.

    我用simulator试了下,expression窗口的确如你所说。

    但是memory 窗口数据 赋值了。你试下看看。

    同理 第1个也在memory 下看有没有赋值。

  • Bruce

    您好!

    按照您所说的,我再次测试了一下,两个问题中的memory 窗口数据的确有赋值了,但expression窗口和Variables窗口依旧是原来的错误,我想知道这具体是什么原因,以便于以后的调试,还有这对于结构体中各寄存器的赋值有没有影响,以及对整个代码实现有没有影响???

    还有我想问一下,出现这种情况是书写代码(有些代码原本就是CSL库中的)的不当,还是CCS测试平台expression窗口和Variables窗口本身就看不到这些数据呢???

    谢谢!

  • 您好,

    第二个问题:不能在expression中像你这么查看,可以在expression中输入((CSL_BootcfgRegs*)CSL_BOOT_CFG_REGS)进行查看。

    第一个问题:请问你的DDR_Regs 是局部变量么?我像你那样声明一个局部变量,在Variables可以看没问题;全局变量在expression中也可以看。

  • 您好!

    我测试了一下,第二个问题已经解决,可以像你们所说那样查看,但还是有个疑问,为什么不能直接查看这样定义的结构体中的成员呢?

    第一个问题依然存在,DDR_Regs本来是作为局部变量的,但Variables和expression还是和原来的情形一样,后来将DDR_Regs改为全局变量,也还是同样的情形。现在将部分程序如下,请各位再帮忙指点一下!

    void Shannon_EVM_DDR_Init(float clock_MHz)

    {

    CSL_Emif4fRegs * DDR_Regs = (CSL_Emif4fRegs*) CSL_DDR3_EMIF_CONFIG_REGS;

    CSL_BootcfgRegs * boot_cfg_regs = (CSL_BootcfgRegs*) CSL_BOOT_CFG_REGS;

    printf("configure DDR at %d MHz\n", (unsigned int)clock_MHz);

    CSL_BootCfgUnlockKicker();

    //配置SDRAM 定时寄存器(Timing Register)

    DDR_Regs->SDRAM_TIM_1   =/*11137824*/

    ((unsigned int)(13.5*clock_MHz/1000.f-0.0001f)    <<CSL_EMIF4F_SDRAM_TIM_1_REG_T_RP_SHIFT)|

    ((unsigned int)(13.5*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_1_REG_T_RCD_SHIFT)|

    ((unsigned int)(15*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_1_REG_T_WR_SHIFT)|

    ((unsigned int)(36*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_1_REG_T_RAS_SHIFT)|

    ((unsigned int)(49.5*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_1_REG_T_RC_SHIFT)|

    ((unsigned int)(5-1)<<CSL_EMIF4F_SDRAM_TIM_1_REG_T_RRD_SHIFT)|

    ((unsigned int)(7.5*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_1_REG_T_WTR_SHIFT);

    DDR_Regs->SDRAM_TIM_2   = (5<<25)| /*ODTH8*/

    ((unsigned int)(6*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_2_REG_T_XP_SHIFT)|

    ((unsigned int)(120*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_2_REG_T_XSNR_SHIFT)|

    ((512-1)<<CSL_EMIF4F_SDRAM_TIM_2_REG_T_XSRD_SHIFT)|

    ((unsigned int)(7.5*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_2_REG_T_RTP_SHIFT)|

    ((unsigned int)(5.625*clock_MHz/1000.f-0.0001f)<<CSL_EMIF4F_SDRAM_TIM_2_REG_T_CKE_SHIFT);

    ……

    }

    还有就是memory 窗口可以看到数据赋值,但Variables和expression不能,这属于程序正确执行吗,对程序最终有影响没呢?

    请大家多多帮忙!

    谢谢!