stm32实现flash参数存储

博客介绍了使用结构体和联合体实现flash参数存储的方法。前提是具备flash读写驱动程序,思路是用结构体创建参数列表,用联合体创建结构体和数组的组合。运行结果显示,利用联合体特性,修改变量可同步更新,添加参数只需往结构体加变量,适用于任何存储器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此方法非常高效,使用结构体+联合体的方式实现flash的参数存储,到底有多简单高效,可以往后面看,如果觉得不高效,完全可以顺着网线来砍我。

前提条件:

1-flash的读写驱动程序,这里不做介绍

实现思路:

2-1结构体创建一个参数列表,大家知道结构体就是一个大箱子,里面放很多变量。

2-2联合体创建一个结构体和数组的组合,联合体多个变量占用同一个内存,这个特性大家有没有一语惊醒你,没有也没关系,下面直接实现代码。

#include <stdio.h>
#include "string.h"
struct NV_T
{
	char a;
	short b;
	int c;
	float d;
	
};

union NV_U
{
	struct NV_T nv_list;
	unsigned char flash_buf[12];	//保存所有数据的数组
}nv_para;



//验证NV大小是否正确
int check_nv_buf_size()
{
	if(sizeof(nv_para.flash_buf) == sizeof(nv_para.nv_list))
	{
		return 1;
	}
	printf("nv size dis %d %d\n",sizeof(nv_para.nv_list),sizeof(nv_para.flash_buf));
	return 0;
}

int main()
{

	if(check_nv_buf_size() ==1 )
	{
		printf("nv size ok\n");
	}

   
   printf("hes:%d %d\n",sizeof(nv_para.nv_list),sizeof(nv_para.flash_buf));
   
   nv_para.nv_list.a =89;
   nv_para.nv_list.d =25.456;
   
   //新建一个nv变量,模拟flash
   union NV_U nv1={0};
   
   memcpy(nv1.flash_buf,nv_para.flash_buf,sizeof(nv_para.flash_buf));
   
   printf("sn:%d %d\n",nv_para.nv_list.a,nv1.nv_list.a);
   printf("sn:%0.3f %0.3f\n",nv_para.nv_list.d,nv1.nv_list.d);
   
   return 1;
}

运行结果:可以看到nv1变量里面的参数列表的值和nv_para里面的值是一样的,我们只是拷贝了联合体的flash_buf变量,没有实际拷贝结构体的变量。

有这个结果是应为联合体的特性,struct NV_T nv_list;    unsigned char flash_buf[12];    这两个变量使用了同一个内存,不管你修改谁,他们都会同步修改,是不是很舒服。

使用这种方式以后添加参数,只需要往结构体里面加变量就ok,非常直接高效,适用于任何存储器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值