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.

C6748下变量赋值的问题

图中,第1666行,g_YCFrame.umFrame82.str_Frame_82.lon[3]是个字节型、长度为4的数组最后一个变量,地址是0xC00553EB(在Expression中),采用直接赋值的方式改变g_YCFrame.umFrame82.str_Frame_82.lon[3]的值,想赋值成0xAA。单步过后,可以看出g_YCFrame.umFrame82.str_Frame_82.lon[3]还是0(在Expression中和右侧的内存地址中都可看出)。

现在换一种方法,结果参见下图。

图中,第1670行,定义一个Uchar的指针*p,将指针赋值到g_YCFrame.umFrame82.str_Frame_82.lon[3]的地址,就是0xC00553EB(从Expression可以看出)。然后通过地址指针的方式写入数据,就是可以的。从Expression和右侧的内存地址中都可以看出,g_YCFrame.umFrame82.str_Frame_82.lon[3]被成功改写成0xBB。
关于这个问题,我们对应看了一下g_YCFrame.umFrame82.str_Frame_82.lon[0~3]四句话对应的汇编码,如下图所示。

图中可以看出,四句话对应的汇编码不一样,g_YCFrame.umFrame82.str_Frame_82.lon[3]的汇编码与前三个不同,无法直接赋值。为什么这样赋值不对?

运行环境:CCS5.5;平台:C6748;变量定义在DDR2RAM中;CMD文件如下图所示。

  • 还请德仪的大牛们指点指点

  • 从上面汇编看出赋值到0x4开始的地址了,这是在EMIFCS0的空间,不在DDR。

     你编译时有没有warning?

    建议把上面cmd里无关的memory部分删掉。EMIFCS0-4放进来干嘛,又不会用到,还有L1P, L1D, ROM等统统删掉。

  • 首先感谢Tony的回复!
    g_YCFrame.umFrame82.str_Frame_82.lon[3]的地址是0xC00553EB,我在CMD中定义的text段在DDR2,cmd中前面定义的DDR2起始地址是0xC0000000,前后能对应的上,可以看出g_YCFrame.umFrame82.str_Frame_82.lon[3]确实是定义在DDR2中。注意汇编码中的第一行,基地址放在了0xC0050000,也是在DDR2中。


    我的问题是g_YCFrame.umFrame82.str_Frame_82.lon[]里面这个数组变量的赋值前后不对应问题。


    您看到的汇编码中0x4XXXX的赋值,是不是1668行下面的部分?这个跟我问题中的赋值没有关系,是调试后的部分。


    编译时没有warnning。

    CMD中不需要的部分可以删掉,不过既然用不到应该也不会有什么影响。

    还请Tony看到回复后给出更详细的指点,谢谢!

  • 再补充一点,这几天调试中,将text段从DDR2改成了L2RAM中,变量赋值就正常了!!!由于L2RAM只有256KB,现在程序已经达到241KB,所以这个问题现在还不严重,但是很快超过256KB就不行了!总之,现在变量放在DDR2中的赋值问题还是没解决