问大家一个问题,STM32F107上LWIP为什么没考虑放弃字节对齐?(我没有发现)C语言下struct是4字节对齐的,但处理包的时侯,在LWIP中根据不同数据长度读取相应数据的,所以,就该让编译器放弃struct的字节对齐。
我在cc.h中找到这个,(我用的是IAR)
#if defined (__ICCARM__)
#define PACK_STRUCT_BEGIN
#define PACK_STRUCT_STRUCT
#define PACK_STRUCT_END
#define PACK_STRUCT_FIELD(x) x
#define PACK_STRUCT_USE_INCLUDES
发现define并没有给PACK_STRUCT_BEGIN 后加什么代码以让编译器放弃字对齐
在etharp.h中的结构体eth_addr如下
PACK_STRUCT_BEGIN
struct eth_addr {
PACK_STRUCT_FIELD(u8_t addr[ETHARP_HWADDR_LEN]);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END
以上面的看来,我觉得编绎器并没有放弃字对齐,可是这样做不是不能正常工作吗?可是我运行那个例程(网上下的)居然没有问题,小弟糊涂,望高人指点一下,谢谢! |