問題是這樣的,現在有一個結構體
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”
這樣保存舊結構體引數,讓每個行號對應固定的成員,添加新成員的時候,永遠添加在末尾,這樣就不會影響原本資料的正確讀出了
可這樣保存,也有些不好的地方,就是要先建立檔案系統,當然這個弊端僅針對于我,因為原專案代碼是上古時期寫的所以沒有使用檔案系統,現在要改改動很大,所以求教還有什么比較方便的解決方案嗎?
uj5u.com熱心網友回復:
這不是檔案系統的問題,就是定義一個資料格式,用JSON吧轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/9286.html
標籤:單片機/工控
上一篇:新人求助,關于STM32定時器PWM的電壓不正常問題
下一篇:DSP 28335
