gpt4 book ai didi

c - 结构包装和与mingw对齐

转载 作者:太空狗 更新时间:2023-10-29 15:00:32 24 4
gpt4 key购买 nike

我在 PC(mingw32、32 位架构)上模拟来自嵌入式系统(stm32、Keil µVision 5、MDK-ARM)的代码。 ARM 编译器的对齐与我的桌面 mingw 构建不匹配:

// 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;


在源代码中,我执行以下操作:file.var1 = 0x22; file.var2 = 0xAA55; 然后写入内存。当我读取嵌入式系统上的内存时,它显示 0x22, 0x55, 0xAA。在 Windows 机器上,它读取 0x22、0xFF、0x55、0xAA,并在第 2 个nd 字节处进行填充。我该如何纠正这种行为?

最佳答案

我自己修复了它 -> 使用 -mno-ms-bitfields 编译有帮助!上面的代码确实是正确的。有必要告诉mingw使用gcc的bitfield organization,而不是microsoft style。虽然当时的代码可能无法用微软编译器编译,但我现在不在乎。

关于c - 结构包装和与mingw对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24015852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com