搜索
bottom↓
回复: 12

请教一个C51结构体的奇怪问题

[复制链接]

出0入0汤圆

发表于 2012-8-1 12:36:31 | 显示全部楼层 |阅读模式
在做一个通讯结构时发现这样的问题,百思不得其解啊~~
定义双字节结构
typedef     unsigned char        UCHAR;
typedef        unsigned int        UINT;

typedef  union
{
        UINT        VAL;
        struct
        {
                UCHAR        LOW;
                UCHAR        HIGH;
        }BYTE;
}WORD;


定义数据结构

union send_packed                                        //上传数据包定义
{
        struct
        {
                WORD        Head;
                WORD        CH1;
                WORD        CH2;
                WORD        CH3;
                WORD        CH4;
                WORD        CH5;
                WORD        CH6;
                UCHAR        Chk;
        } packet;
        UCHAR byt_data[15];
} sDATA;

这样定义的数据是对的 每个WORD分配2字节

union send_packed                                        //上传数据包定义
{
        struct
        {
                WORD        Head;
                WORD        CH[6];
                UCHAR        Chk;
        } packet;
        UCHAR byt_data[15];
} sDATA;

但这样定义出来的数据就乱套了,每个CH[]分配4字节,其中高2字节是空的。。。 不解啊

还有C51貌似不支持对齐指令#pragma pack(1)啊~~

在线等,知道的帮忙下 谢谢了

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2012-8-1 13:12:44 | 显示全部楼层
不要沉了~~知道的给点提示 谢谢了

出0入0汤圆

发表于 2012-8-1 14:03:41 | 显示全部楼层
不是正好吗,15

出0入0汤圆

 楼主| 发表于 2012-8-1 15:11:52 | 显示全部楼层
不是的上图你看看

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2012-8-1 15:35:53 | 显示全部楼层
lovewwy 发表于 2012-8-1 14:03
不是正好吗,15

不是 15的  我上图了 你帮忙看看是怎么一回事

出0入0汤圆

 楼主| 发表于 2012-8-2 08:49:30 | 显示全部楼层

不要沉了~~知道的给点提示 谢谢了

出0入0汤圆

发表于 2012-8-2 09:12:10 | 显示全部楼层
应该是两个字节,看后面的地址分配就知道了.

出0入0汤圆

发表于 2012-8-2 09:25:33 | 显示全部楼层
支持 korren !

出0入0汤圆

发表于 2012-8-2 10:26:52 | 显示全部楼层
korren 发表于 2012-8-2 09:12
应该是两个字节,看后面的地址分配就知道了.

地址分配好像的确4个字节,不知道为啥

出0入0汤圆

发表于 2012-8-2 10:40:32 | 显示全部楼层
是编译器不支持的,前几天看了c++primary plus也说到了这个,只有比较新版本的c++编译器支持,
这个,应该也一样的吧

出0入0汤圆

 楼主| 发表于 2012-8-2 10:40:42 | 显示全部楼层
korren 发表于 2012-8-2 09:12
应该是两个字节,看后面的地址分配就知道了.

你是说 CHk的分配地址??  这个我也疑惑。。。。
硬件好了,上硬件看看结果先~~

出0入0汤圆

发表于 2012-8-2 11:04:35 | 显示全部楼层
graycker 发表于 2012-8-2 10:40
是编译器不支持的,前几天看了c++primary plus也说到了这个,只有比较新版本的c++编译器支持,
这个,应该 ...

记错了,刚刚下了个电子版的看了下,是老版本的编译器结构体中不支持string类型

出0入0汤圆

 楼主| 发表于 2012-8-2 13:11:23 | 显示全部楼层
硬件测试下来 2个结构的运行结果一样。。。。。
说明是IDE或者Keil的编译显示有问题

唉~~都是看下sizeof()惹得祸,明明是15字节,size下居然29字节了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 17:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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