嵌入式开发者社区

标题: 关于字节对齐的Union和结构体内变量赋值的问题 [打印本页]

作者: 西工大老南瓜    时间: 2017-7-12 20:54
标题: 关于字节对齐的Union和结构体内变量赋值的问题
[attach]2543[/attach]
图中,第1666g_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右侧的内存地址中都可看出)
现在换一种方法,结果参见下图。
[attach]2544[/attach]
图中,第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]四句话对应的汇编码,如下图所示。
[attach]2545[/attach]
图中可以看出,四句话对应的汇编码不一样,g_YCFrame.umFrame82.str_Frame_82.lon[3]的汇编码与前三个不同,无法直接赋值。为什么这样赋值不对?
运行环境CCS5.5;平台:C6748;变量定义在DDR2RAMCMD文件如下图所示
[attach]2546[/attach]
现在这个问题如果cmd文件定义成下面这样
[attach]2547[/attach]
就是.text”段定义到L2RAM中,就可以实现正常赋值了,放在DDR2中就不行。是DDR2内存不支持单字节对齐吗?还有现在代码段共计240KB,很快就超过L2RAM256KB上限,超过以后怎么办?另外现在程序处于下载器调试状态,以后在烧写时text应该是放在flash中,如果加载L2中,那还是会有同样的问题这个问题怎么解决啊?
其实我就是union中套U8数组单字节对齐结构体方式实现通信协议的组帧和解帧。


作者: Lewis    时间: 2017-7-14 11:26
DDR2内存没有字节对齐的问题,一般定义的变量都是可以赋值的,这个应该是程序的问题,你的这个结构体是怎么定义的呢




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4