我有一个指定如下的结构
- 成员 1,16 位
- 成员 2,32 位
- 成员 3,32 位
我将从文件中读取。我想直接从文件中读取到结构中。
问题是 C 编译器会将变量 m1、m2 和 m3 与 32 位的字边界对齐,因为我正在为以下结构声明使用 ARM Cortex M3:
typedef struct
{
uint16_t m1;
uint32_t m2;
uint32_t m3;
}something;
直接从文件中读取会在 m2 和 m3 中放入错误的值,并且还会读取 2 个额外字节。
我已经破解了,目前正在使用以下效果很好:
typedef struct
{
uint16_t m1;
struct
{
uint16_t lo;
uint16_t hi;
}m2;
struct
{
uint16_t lo;
uint16_t hi;
}m3;
}something;
然而,这看起来像一个非常肮脏的黑客。我不禁希望有一种更简洁的方法来强制编译器将 m2 和 m3 的一半放在不同的词中,但它可能不是最理想的。
我正在使用 arm-none-eabi-gcc。我知道位打包,但无法解决此优化问题。
编辑:原来我对位打包知之甚少:D