关于字节对齐的Union和结构体内变量赋值的问题 - TMS320C6748 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2942|回复: 1
打印 上一主题 下一主题

[未解决] 关于字节对齐的Union和结构体内变量赋值的问题

[复制链接]

1

主题

1

帖子

21

积分

新手上路

Rank: 1

积分
21
跳转到指定楼层
楼主
发表于 2017-7-12 20:54:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
图中,第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右侧的内存地址中都可看出)
现在换一种方法,结果参见下图。
图中,第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;变量定义在DDR2RAMCMD文件如下图所示
现在这个问题如果cmd文件定义成下面这样
就是.text”段定义到L2RAM中,就可以实现正常赋值了,放在DDR2中就不行。是DDR2内存不支持单字节对齐吗?还有现在代码段共计240KB,很快就超过L2RAM256KB上限,超过以后怎么办?另外现在程序处于下载器调试状态,以后在烧写时text应该是放在flash中,如果加载L2中,那还是会有同样的问题这个问题怎么解决啊?
其实我就是union中套U8数组单字节对齐结构体方式实现通信协议的组帧和解帧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
沙发
发表于 2017-7-14 11:26:15 | 只看该作者
DDR2内存没有字节对齐的问题,一般定义的变量都是可以赋值的,这个应该是程序的问题,你的这个结构体是怎么定义的呢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-17 14:59 , Processed in 0.037413 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表