我把LWIP往ADS工程中移植过程中出现一个问题:
在ip_addr.h中,有以下代码:
struct ip_addr2 {
PACK_STRUCT_FIELD(u16_t addrw[2]);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
在MDK中对应的宏定义在cc.h中:
#if defined(__CC_ARM) /* ARMCC compiler */
#define PACK_STRUCT_FIELD(x) x
#define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
其中__attribute__ ((__packed__))是表明不让编译器自动填充对齐结构体成员。是个GNU编译器扩展。
mdk支持在结构体最后的位置(;前),但是ADS却要在struct 之后,位置不一样,如下:
struct __packed ip_addr2 {
PACK_STRUCT_FIELD(u16_t addrw[2]);
};
这样,我就没有办法不改动源代码,只通过修改宏定义的方法实现。难道真的要把所有结构体定义的代码修改一遍吗?是不是有我不知道的方法可以只修改宏定义就可以?请大家指点。
我把LWIP往ADS工程中移植过程中出现一个问题:
在ip_addr.h中,有以下代码:
struct ip_addr2 {
PACK_STRUCT_FIELD(u16_t addrw[2]);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
在MDK中对应的宏定义在cc.h中:
#if defined(__CC_ARM) /* ARMCC compiler */
#define PACK_STRUCT_FIELD(x) x
#define PACK_STRUCT_STRUCT __attribute__ ((__packed__))
其中__attribute__ ((__packed__))是表明不让编译器自动填充对齐结构体成员。是个GNU编译器扩展。
mdk支持在结构体最后的位置(;前),但是ADS却要在struct 之后,位置不一样,如下:
struct __packed ip_addr2 {
PACK_STRUCT_FIELD(u16_t addrw[2]);
};
这样,我就没有办法不改动源代码,只通过修改宏定义的方法实现。难道真的要把所有结构体定义的代码修改一遍吗?是不是有我不知道的方法可以只修改宏定义就可以?请大家指点。
举报