新手上路
积分 38
金钱 38
注册时间 2020-8-28
在线时间 9 小时
1 金钱
本帖最后由 hsoalgyer 于 2020-8-28 11:44 编辑
问题是这样的,现在有一个结构体
typedef
{
int a;
int b;
char c[10];
int d;
}A; 复制代码 然后我创建一个结构体变量,并对其所有成员赋值,最后将结构体写入flash指定地址(即直接以二进制的方式写入)。
完了之后,现在程序升级了,结构体A的定义发生了变化,如下
typedef
{
int a;
int b;
int e; //成员增加
char c[20];//元素增加
int d;
}A;
若现在我烧写程序到单片机,那么程序会从flash中指定地址读回sizeof(A)个字节,并将数据填入新的结构体A中,那样的话数据c,d就会错乱,有什么好的解决方法吗?
我想到的一个不怎么好的方法是,升级后的程序第一次运行时,先把flash中的保存的数据读到旧的结构体,然后再一个一个成员的赋值给新结构体,但这么做有个很大的弊端,就是程序得保留每个版本的结构体A的定义。
比方说一个单片机用的是版本2,因为一些原因他得升级到版本5,那要使用原来保存的数据,就必须先从2->3->4->5,那样相当麻烦
还有就是以字符的方式保存,比方说
“1,a=1”
“2,b=2”
“3,c=hello”
“4,d=4”
这样保存旧结构体参数,让每个行号对应固定的成员,添加新成员的时候,永远添加在末尾,这样就不会影响原本数据的正确读出了
可这样保存,也有些不好的地方,就是要先建立文件系统,当然这个弊端仅针对于我,因为原项目代码写的很不好没有使用文件系统,现在要改改动很大,所以求教还有什么比较方便的解决方案吗?
我来回答