我是靠谱客的博主 怕孤单嚓茶,最近开发中收集的这篇文章主要介绍结构体数据存入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 ;

最后

以上就是怕孤单嚓茶为你收集整理的结构体数据存入Flash中,元素位置偏移的问题分析的全部内容,希望文章能够帮你解决结构体数据存入Flash中,元素位置偏移的问题分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(102)

评论列表共有 0 条评论

立即
投稿
返回
顶部