學了這麼久的嵌入式,這個參數存儲訣竅你或許還不知道
發布時間:2017-03-13 責任編輯:susan
【導讀】如果有幾個設置參數需要存儲到Flash中,我們一般會怎麼存儲呢?將不同的參數都存儲到不同的頁中,還是將這幾個參數捆綁成一種結構體,每次修改都同時寫入一次呢?
將參數存儲到固定的地址,則每個參數都將占用Flash的一個塊。而將全部參數捆綁一起存入Flash塊中,那麼隻有一個參數修改時,也需要將全部參數一起存一遍。那麼有什麼更好的方法嗎?
前段時間學習Msos,看到其中使用的參數存儲的方法設計的很好,它將參數的變量地址與值,一同存儲入Flash中。出彩之處是使用參數的變量地址來標記不同的變量。
一、數據結構
這種存儲方式使用兩個數據結構:
typedef struct
{
uint Address; //參數變量的地址
uint Data; //參數變量的值
}CellStruct;
要存儲某個變量,需要將這個變量的地址和它的值一同存儲到存儲區。這種存儲方式的核心就是這個數據結構。這樣就可以使用*((uint *)(Address)) = Data 直接將存儲值賦值給對應的變量。簡單的說就是根據地址值來標記各個不同的參數。
2.存儲區的數據結構
typedef struct {

二、代碼解析
這種存儲方式的使用兩個函數:
讀取存儲區中的變量值並更新變量的值
變量的存儲函數
2.1 參數的讀取

流程圖如上,主要步驟如下:
根據Flash中存寫的變量地址,更新變量的值;
將Flash中存寫的地址值存入臨時數組中,並根據地址值判斷是否存在重複存儲的無效數據,並將無效數組失效;
清空Flash存儲區,將臨時數組中有效的變量重新存入Flash中。
通過這些步驟,將存儲區中存儲的變量讀出,並將存儲區中的重複的無效數據清除。下麵是源代碼:

2.2 參數的寫入
參數的寫入就很簡單了,根據數據結構中的寫入點,將變量的地址與值寫入Flash中。
2.3 使用方法
使用方法:
每次上電啟動時,調用讀取全部變量的函數;
修改某個參數的時候,調用寫參數函數;
三、注意事項
在讀取參數時,需要在RAM中建立一個ParameterSpace大小的數組,如果這個值太大,會超過棧的大小,使得內存溢出。因此存儲區不能開辟的太大。

四、總結
這zhe種zhong方fang式shi使shi用yong簡jian便bian,尤you其qi是shi在zai更geng新xin變bian量liang值zhi時shi,根gen據ju存cun儲chu的de變bian量liang地di址zhi更geng新xin相xiang應ying的de值zhi。其qi實shi其qi本ben質zhi與yu我wo們men使shi用yong變bian量liang名ming來lai標biao記ji不bu同tong的de變bian量liang是shi一yi樣yang的de。不bu過guo也ye有you缺que點dian:
首先其同時存儲變量的地址與變量的值,相當於多使用一倍的存儲空間;
像上麵的注意事項中說的,存儲區不能開辟的過大,否則會使臨時數組超過棧的大小。
特別推薦
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
技術文章更多>>
- 貿澤EIT係列新一期,探索AI如何重塑日常科技與用戶體驗
- 算力爆發遇上電源革新,大聯大世平集團攜手晶豐明源線上研討會解鎖應用落地
- 創新不止,創芯不已:第六屆ICDIA創芯展8月南京盛大啟幕!
- AI時代,為什麼存儲基礎設施的可靠性決定數據中心的經濟效益
- 矽典微ONELAB開發係列:為毫米波算法開發者打造的全棧工具鏈
技術白皮書下載更多>>
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
Future
GFIVE
GPS
GPU
Harting
HDMI
HDMI連接器
HD監控
HID燈
I/O處理器
IC
IC插座
IDT
IGBT
in-cell
Intersil
IP監控
iWatt
Keithley
Kemet
Knowles
Lattice
LCD
LCD模組
LCR測試儀
lc振蕩器
Lecroy
LED
LED保護元件
LED背光




