本帖最后由 小黑黑兔子乖乖 于 2014-2-8 17:44 编辑
我在编写通信程序时,定义了一个共用体,这个结构体由许多的共用体组成:如下
struct YAOXIN_BITS1 {
u8 STOPRUN:1;
u8 MANUALAUTO:1;
u8 DEVICEERR:1;
u8 BOARDERR:1;
u8 UNITERROR:1;
u8 LCDERROE:1;
u8 SOURCEERR:1;
u8 CAPCABERR:1;
};
union YAOXIN_DATA1 {
char all;
struct YAOXIN_BITS1 bit;
};
//这是其中的一个union的具体定义,其他具体的位定义不同,结构体名分别位
YAOXIN_DATA1 、YAOXIN_DATA2.。。。。。。YAOXIN_DATA20
struct YAOXIN_BITSALL{
union YAOXIN_DATA1 data1;
union YAOXIN_DATA2 data2; //其中每一个union都是8位
union YAOXIN_DATA3 data3;
union YAOXIN_DATA4 data4;
union YAOXIN_DATA5 data5;
union YAOXIN_DATA6 data6;
union YAOXIN_DATA7 data7;
union YAOXIN_DATA8 data8;
union YAOXIN_DATA9 data9;
union YAOXIN_DATA10 data10;
union YAOXIN_DATA11 data11;
union YAOXIN_DATA12 data12;
union YAOXIN_DATA13 data13;
union YAOXIN_DATA14 data14;
union YAOXIN_DATA15 data15;
union YAOXIN_DATA16 data16;
union YAOXIN_DATA17 data17;
union YAOXIN_DATA18 data18;
union YAOXIN_DATA19 data19;
union YAOXIN_DATA20 data20;
union YAOXIN_DATAQuery_1 dataQuery_1;
union YAOXIN_DATAQuery_2 dataQuery_2;
};
union YAOXIN_DATAS {
char all[22];
struct YAOXIN_BITSALL bitsall;}
可是不知道为什么我的结构体bitsall与all存储空间不是一一对应的!有谁帮我找一下问题!
例如all[5]中存储的不是data6的值,经过测试如果YAOXIN_BITSALL中定义的union全部换成char类型就能一一对应上,如果换成union型只有data6和data13分别占用16位,其他正常占用8位。
all[0]对应data1,
all[1]对应data2,
all[2]对应data3,
all[3]对应data4,
all[4]对应data5,
all[5]对应0x00,错误在这里
all[6]对应data6,
all[7]对应data7,
all[8]对应data8,
大家快来帮帮忙啊,着急啊! |