结构体数据存入Flash中,元素位置偏移的问题分析

问题背景:今天调试Flash存储,其中存储数据是一个结构体变量,发现结构体变量中有一些元素位置往后偏移的问题!
具体原因:如下面的结构体变量 test,把其存入flash中,其所占空间为6字节,而不是5字节;原因就是结构体有字节对齐的概念,即以结构体成员中占内存最多的数据类型所占的字节数为标准,所有的成员在分配内存时都要与这个长度对齐。以下面的结构体变量test为例,其元素中a和c是两个字节,则b要与其对齐,则会自动补充一个空字节;

typedef struct{
	uint16_t a;
	uint8_t  b;
	uint16_t c;
}TEST_T;
TEST_T test ;

具体再复杂的结构体字节对齐就不讲了,有很多例子,该记录就是描述这个基本的常识,可能会导致与之前想的不一致的效果;

解决办法:若要避免Flash空间浪费,则只需在在结构体变量定义时添加__attribute__特性就可;例如以下

typedef struct{
	uint16_t a;
	uint8_t  b;
	uint16_t c;
}__attribute__ ((__packed__))TEST_T;
TEST_T test ;

猜你喜欢

转载自blog.csdn.net/weixin_43704402/article/details/113847071