利用结构体定义数据存储结构并读写

30 篇文章 1 订阅
17 篇文章 6 订阅
本文介绍了如何通过定义结构体来简化I2C存储芯片的数据读写操作,避免直接地址访问带来的维护成本和错误风险。通过宏定义`offsetof`计算结构成员的偏移地址,以及`sizeof`确定成员大小,使得在添加或删除存储结构元素时,代码改动最小。示例中展示了如何使用结构体`CANDIDATE_T`进行读写操作,这种方法提高了代码的可维护性和稳定性。
摘要由CSDN通过智能技术生成

很多时候读I2C存储芯片,需要定义一堆的地址,读写长度,如果后期在中间插入一个存储,维护的成本就会很高,调试修改都很困难,介绍一种利用结构体定义存储结构的方法,需要用到以下两个宏定义

计算结构成员在结构体内的偏移地址,用在I2C的存储结构中很方便知道每个变量的存储地址,修改存储结构也不会影响到程序的修改

#define offsetof(TYPE, MEMBER) ((int)(&((TYPE *)0)->MEMBER))

计算结构成员的占用的空间

sizeof(((CANDIDATE_T*)0)->total_tv)

使用样例,定义数据存储结构CANDIDATE_T

typedef struct {
	VOTE_DATE_T		vote_date;
	uint8_t			vtn[50];
	uint8_t			av;
	uint8_t			ebb_id[12];
	uint16_t		total_tv;	
	uint8_t			candidate_num;
	uint16_t		total_voters;
	uint16_t		no_voters;
	VOTE_DATA_T		vote_data[CANDIDATE_NUM];
}CANDIDATE_T;

at88sc_write_storage( AT_SC, offsetof(CANDIDATE_T,total_tv), sizeof(((CANDIDATE_T*)0)->total_tv), ptr);
at88sc_read_storage( AT_SC, offsetof(CANDIDATE_T,total_tv), sizeof(((CANDIDATE_T*)0)->total_tv), ptr);

修改数据存储基本不用修改代码,改变地址也不用担心程序读写地址出错,改变名称更会有编译错误担心,添加删除数据单元出一样,比直接地址读写方式省下维护的时间,修改起来也不会出错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵向深耕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值