在 GCC C 中,如何获得一个打包结构数组,其中数组中的每个条目都是对齐的?
(FWIW,这是在 PIC32 上,使用 MIPS4000 架构)。
我有这个(简化):
typedef struct __attribute__((packed))
{
uint8_t frameLength;
unsigned frameType :3;
uint8_t payloadBytes;
uint8_t payload[RADIO_RX_PAYLOAD_WORST];
} RADIO_PACKET;
RADIO_PACKET 在内部打包。
然后我有 RADIO_PACKET_QUEUE,这是一个 RADIO_PACKET 队列:
typedef struct
{
short read; // next buffer to read
short write; // next buffer to write
short count; // number of packets stored in q
short buffers; // number of buffers allocated in q
RADIO_PACKET q[RADIO_RX_PACKET_BUFFERS];
} RADIO_PACKET_QUEUE;
我希望数组 q[] 中的每个 RADIO_PACKET 都从对齐的地址(模 4 地址)开始。
但是现在 GCC 没有对齐它们,所以当我尝试将 q[n] 读取为一个单词时会出现地址异常。例如,这给出了一个例外:
RADIO_PACKET_QUEUE rpq;
int foo = *(int*) &(rpq.q[1]);
也许这是因为我将 RADIO_PACKET 声明为已打包的方式。
我希望每个 RADIO_PACKET 在内部保持打包,但希望 GCC 在每个数组元素之后根据需要添加填充,以便每个 RADIO_PACKET 从对齐的地址开始。
我怎样才能做到这一点?