Xilinx Microblaze结构填料/包装

时间:2012-08-06 18:04:53

标签: c++ c gcc xilinx 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(size1)= 4; sizeof(size2)= 12;

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

在num3和st_size之间添加两个字节的填充.. Microblaze编译器不支持Pragma Pack

我正在尝试使用属性((已打包)),但没有取得任何成功......

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

}size2 __attribute__((packed));

我不确定什么是错的,或者这是否也是这样的。

由于

2 个答案:

答案 0 :(得分:1)

你正在使用g {/ Microblaze上4字节的unsigned int位字段类型。

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

答案 1 :(得分:0)

我已在我的头文件之一中成功使用它来描述以太网头:

struct eth_hdr_st {
    unsigned char dst_addr[6];
    unsigned char src_addr[6];
    unsigned short datatype;
} __attribute__ ((__packed__));

然后我就这样使用它:

struct eth_hdr_st eht_header;

请注意,第一部分是名为eth_hdr_st的结构的结构定义;第二部分是声明名为eth_header的变量struct eth_hdr_st

代码中的错误是,您将这些部分混合在一起,并试图将__attribute__((packed))应用于名为size2的变量。