关于怎么在升级之后还能正确读取flash中数据

hsoalgyer 2020-08-28 01:09:28
问题是这样的,现在有一个结构体

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”

这样保存旧结构体参数,让每个行号对应固定的成员,添加新成员的时候,永远添加在末尾,这样就不会影响原本数据的正确读出了
可这样保存,也有些不好的地方,就是要先建立文件系统,当然这个弊端仅针对于我,因为原项目代码是上古时期写的所以没有使用文件系统,现在要改改动很大,所以求教还有什么比较方便的解决方案吗?
...全文
221 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
硬件拾遗 2020-08-28
  • 打赏
  • 举报
回复
这不是文件系统的问题,就是定义一个数据格式,用JSON吧

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧