概述
问题背景:今天调试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 ;
最后
以上就是怕孤单嚓茶为你收集整理的结构体数据存入Flash中,元素位置偏移的问题分析的全部内容,希望文章能够帮你解决结构体数据存入Flash中,元素位置偏移的问题分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复