2012-08-06 63 views
-1

我有两种结构:赛灵思Microblaze的结构填充/包装

Struct _size1 { 
    union{ 
      short a; 
      struct { 
        char b; 
        char c; 
      }d; 
      struct { 
        char x; 
        char y; 
      }z; 
    }; 

    union{ 
      short a1; 
      struct { 
        char b1; 
        char c1; 
      }d1; 
      struct { 
        char x1; 
        char y1; 
      }z1; 
     }; 
}size1; 

和:

Struct _size2 { 
    short num; //2 bytes 
    short num2; //2 bytes 
    short num3; //2 bytes 
    size1 st_size; //4 bytes 

}size2; 

的的sizeof(尺寸1)= 4; sizeof(size2)= 12;

我想要获得的尺寸是10尺寸2。

它添加NUM3和st_size之间的两个字节填充.. Microblaze的编译器不支持附注包

我想使用属性((包装)),但都没有成功...

Struct _size2 { 
    short num; //2 bytes 
    short num2; //2 bytes 
    short num3; //2 bytes 
    size1 st_size; //4 bytes 

}size2 __attribute__((packed)); 

我不知道什么是错的,或者如果这甚至可以这样工作。

由于

回答

1

您正在使用unsigned int位字段类型这是对GCC/Microblaze的4个字节。

使用gcc实现定义的unsigned short位字段类型与gcc/Microblaze具有2个字节的大小。