學(xué)了這么久的嵌入式,這個(gè)參數(shù)存儲訣竅你或許還不知道
發(fā)布時(shí)間:2017-03-13 責(zé)任編輯:susan
【導(dǎo)讀】如果有幾個(gè)設(shè)置參數(shù)需要存儲到Flash中,我們一般會怎么存儲呢?將不同的參數(shù)都存儲到不同的頁中,還是將這幾個(gè)參數(shù)捆綁成一種結(jié)構(gòu)體,每次修改都同時(shí)寫入一次呢?
將參數(shù)存儲到固定的地址,則每個(gè)參數(shù)都將占用Flash的一個(gè)塊。而將全部參數(shù)捆綁一起存入Flash塊中,那么只有一個(gè)參數(shù)修改時(shí),也需要將全部參數(shù)一起存一遍。那么有什么更好的方法嗎?
前段時(shí)間學(xué)習(xí)Msos,看到其中使用的參數(shù)存儲的方法設(shè)計(jì)的很好,它將參數(shù)的變量地址與值,一同存儲入Flash中。出彩之處是使用參數(shù)的變量地址來標(biāo)記不同的變量。
一、數(shù)據(jù)結(jié)構(gòu)
這種存儲方式使用兩個(gè)數(shù)據(jù)結(jié)構(gòu):
typedef struct
{
uint Address; //參數(shù)變量的地址
uint Data; //參數(shù)變量的值
}CellStruct;
要存儲某個(gè)變量,需要將這個(gè)變量的地址和它的值一同存儲到存儲區(qū)。這種存儲方式的核心就是這個(gè)數(shù)據(jù)結(jié)構(gòu)。這樣就可以使用*((uint *)(Address)) = Data 直接將存儲值賦值給對應(yīng)的變量。簡單的說就是根據(jù)地址值來標(biāo)記各個(gè)不同的參數(shù)。
2.存儲區(qū)的數(shù)據(jù)結(jié)構(gòu)
typedef struct {
二、代碼解析
這種存儲方式的使用兩個(gè)函數(shù):
讀取存儲區(qū)中的變量值并更新變量的值
變量的存儲函數(shù)
2.1 參數(shù)的讀取
流程圖如上,主要步驟如下:
根據(jù)Flash中存寫的變量地址,更新變量的值;
將Flash中存寫的地址值存入臨時(shí)數(shù)組中,并根據(jù)地址值判斷是否存在重復(fù)存儲的無效數(shù)據(jù),并將無效數(shù)組失效;
清空Flash存儲區(qū),將臨時(shí)數(shù)組中有效的變量重新存入Flash中。
通過這些步驟,將存儲區(qū)中存儲的變量讀出,并將存儲區(qū)中的重復(fù)的無效數(shù)據(jù)清除。下面是源代碼:
2.2 參數(shù)的寫入
參數(shù)的寫入就很簡單了,根據(jù)數(shù)據(jù)結(jié)構(gòu)中的寫入點(diǎn),將變量的地址與值寫入Flash中。
2.3 使用方法
使用方法:
每次上電啟動時(shí),調(diào)用讀取全部變量的函數(shù);
修改某個(gè)參數(shù)的時(shí)候,調(diào)用寫參數(shù)函數(shù);
三、注意事項(xiàng)
在讀取參數(shù)時(shí),需要在RAM中建立一個(gè)ParameterSpace大小的數(shù)組,如果這個(gè)值太大,會超過棧的大小,使得內(nèi)存溢出。因此存儲區(qū)不能開辟的太大。
四、總結(jié)
這種方式使用簡便,尤其是在更新變量值時(shí),根據(jù)存儲的變量地址更新相應(yīng)的值。其實(shí)其本質(zhì)與我們使用變量名來標(biāo)記不同的變量是一樣的。不過也有缺點(diǎn):
首先其同時(shí)存儲變量的地址與變量的值,相當(dāng)于多使用一倍的存儲空間;
像上面的注意事項(xiàng)中說的,存儲區(qū)不能開辟的過大,否則會使臨時(shí)數(shù)組超過棧的大小。
特別推薦
- AMTS 2025展位預(yù)訂正式開啟——體驗(yàn)科技驅(qū)動的未來汽車世界,共迎AMTS 20周年!
- 貿(mào)澤電子攜手安森美和Würth Elektronik推出新一代太陽能和儲能解決方案
- 功率器件熱設(shè)計(jì)基礎(chǔ)(六)——瞬態(tài)熱測量
- 貿(mào)澤開售Nordic Semiconductor nRF9151-DK開發(fā)套件
- TDK推出用于可穿戴設(shè)備的薄膜功率電感器
- 日清紡微電子GNSS兩款新的射頻低噪聲放大器 (LNA) 進(jìn)入量產(chǎn)
- 中微半導(dǎo)推出高性價(jià)比觸控 MCU-CMS79FT72xB系列
技術(shù)文章更多>>
- 意法半導(dǎo)體推出首款超低功耗生物傳感器,成為眾多新型應(yīng)用的核心所在
- 是否存在有關(guān) PCB 走線電感的經(jīng)驗(yàn)法則?
- 智能電池傳感器的兩大關(guān)鍵部件: 車規(guī)級分流器以及匹配的評估板
- 功率器件熱設(shè)計(jì)基礎(chǔ)(八)——利用瞬態(tài)熱阻計(jì)算二極管浪涌電流
- AHTE 2025展位預(yù)訂正式開啟——促進(jìn)新技術(shù)新理念應(yīng)用,共探多行業(yè)柔性解決方案
技術(shù)白皮書下載更多>>
- 車規(guī)與基于V2X的車輛協(xié)同主動避撞技術(shù)展望
- 數(shù)字隔離助力新能源汽車安全隔離的新挑戰(zhàn)
- 汽車模塊拋負(fù)載的解決方案
- 車用連接器的安全創(chuàng)新應(yīng)用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall
熱門搜索
生產(chǎn)測試
聲表諧振器
聲傳感器
濕度傳感器
石英機(jī)械表
石英石危害
時(shí)間繼電器
時(shí)鐘IC
世強(qiáng)電訊
示波器
視頻IC
視頻監(jiān)控
收發(fā)器
手機(jī)開發(fā)
受話器
數(shù)字家庭
數(shù)字家庭
數(shù)字鎖相環(huán)
雙向可控硅
水泥電阻
絲印設(shè)備
伺服電機(jī)
速度傳感器
鎖相環(huán)
胎壓監(jiān)測
太陽能
太陽能電池
泰科源
鉭電容
碳膜電位器