I am emulating code from an embedded system (stm32, Keil μVision 5, MDK-ARM) on a PC (mingw32, 32bit arch). The alignment of the ARM compiler does not match my desktop mingw build:
// ARM Code (ARM compiler uses __packed)
typedef __packed struct _file
{
uint8_t var1;
uint16_t var2;
} FILE;
// PC mingw gcc code trying to emulate layout above.
typedef struct __attribute__((packed, aligned(1))) _file
{
uint8_t var1;
uint16_t var2;
} FILE;
In the source I do the following: file.var1 = 0x22; file.var2 = 0xAA55;
which is then written to memory. When I read the memory on the embedded system it shows 0x22, 0x55, 0xAA
. On the Windows machine it reads 0x22, 0xFF, 0x55, 0xAA
, with padding at the 2nd byte. How can I correct this behaviour?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…