图中,第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文件如下图所示。