如何对齐 PIC24 芯片结构中的变量?
How to align variables in a struct for PIC24 chips?
我有这个结构,但知道每第 4 个字节都没有在内存中使用,我需要在内存中正确对齐该结构。我不太确定 如何 执行此操作,但我知道我应该这样做,而且我也知道 在哪里 它需要发生。
typedef struct _vol_meta {
uint16_t crc; // 2 bytes
uint8_t ver_major; // 1 byte
char pad1; // need to align here - 1 byte
uint16_t size; // 2 bytes
uint8_t ver_minor; // 1 byte
char pad2; // need to align here - 1 byte
uint8_t pagenum; // 1 byte
uint8_t rownum; // 1 byte
char pad3[2]; // align here - 2 bytes
uint8_t name[15]; // 15 bytes
// not sure how I'm supposed to align the array of uint8_t vars?
} VOL_META;
有没有像
这样的c数据类型
align 2
告诉编译器跳过接下来的 2 个字节之类的?有点迷失在这里。
您可以使用(惊喜)'aligned' 属性,就像这样:
__ attribute __ ((aligned (2)) //单词对齐
xc16 用户指南第 8.12 节是你的朋友。
我有这个结构,但知道每第 4 个字节都没有在内存中使用,我需要在内存中正确对齐该结构。我不太确定 如何 执行此操作,但我知道我应该这样做,而且我也知道 在哪里 它需要发生。
typedef struct _vol_meta {
uint16_t crc; // 2 bytes
uint8_t ver_major; // 1 byte
char pad1; // need to align here - 1 byte
uint16_t size; // 2 bytes
uint8_t ver_minor; // 1 byte
char pad2; // need to align here - 1 byte
uint8_t pagenum; // 1 byte
uint8_t rownum; // 1 byte
char pad3[2]; // align here - 2 bytes
uint8_t name[15]; // 15 bytes
// not sure how I'm supposed to align the array of uint8_t vars?
} VOL_META;
有没有像
这样的c数据类型align 2
告诉编译器跳过接下来的 2 个字节之类的?有点迷失在这里。
您可以使用(惊喜)'aligned' 属性,就像这样:
__ attribute __ ((aligned (2)) //单词对齐
xc16 用户指南第 8.12 节是你的朋友。