日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

技術(shù)干貨分享:嵌入式中參數(shù)存儲(chǔ)的一種方式

出處:電子產(chǎn)品世界 發(fā)布于:2023-07-17 17:38:40

   如果有幾個(gè)設(shè)置參數(shù)需要存儲(chǔ)到Flash中,我們一般會(huì)怎么存儲(chǔ)呢?將不同的參數(shù)都存儲(chǔ)到不同的頁(yè)中,還是將這幾個(gè)參數(shù)捆綁成一種結(jié)構(gòu)體,每次修改都同時(shí)寫(xiě)入呢?

  將參數(shù)存儲(chǔ)到固定的地址,則每個(gè)參數(shù)都將占用Flash的一個(gè)塊。而將全部參數(shù)捆綁一起存入Flash塊中,那么只有一個(gè)參數(shù)修改時(shí),也需要將全部參數(shù)一起存一遍。那么有什么更好的方法嗎?

  前段時(shí)間學(xué)習(xí)Msos,看到其中使用的參數(shù)存儲(chǔ)的方法設(shè)計(jì)的很好,它將參數(shù)的變量地址與值,一同存儲(chǔ)入Flash中。出彩之處是使用參數(shù)的變量地址來(lái)標(biāo)記不同的變量。

  一、數(shù)據(jù)結(jié)構(gòu)

  這種存儲(chǔ)方式使用兩個(gè)數(shù)據(jù)結(jié)構(gòu):

  typedef struct

  {

  uint Address; //參數(shù)變量的地址

  uint Data; //參數(shù)變量的值

  }CellStruct;

  要存儲(chǔ)某個(gè)變量,需要將這個(gè)變量的地址和它的值一同存儲(chǔ)到存儲(chǔ)區(qū)。這種存儲(chǔ)方式的就是這個(gè)數(shù)據(jù)結(jié)構(gòu)。這樣就可以使用*((uint *)(Address))  = Data 直接將存儲(chǔ)值賦值給對(duì)應(yīng)的變量。簡(jiǎn)單的說(shuō)就是根據(jù)地址值來(lái)標(biāo)記各個(gè)不同的參數(shù)。

  2.存儲(chǔ)區(qū)的數(shù)據(jù)結(jié)構(gòu)

  typedef struct {  二、代碼解析

  這種存儲(chǔ)方式的使用兩個(gè)函數(shù):

  讀取存儲(chǔ)區(qū)中的變量值并更新變量的值

  變量的存儲(chǔ)函數(shù)

  2.1 參數(shù)的讀取  流程圖如上,主要步驟如下:

  根據(jù)Flash中存寫(xiě)的變量地址,更新變量的值;

  將Flash中存寫(xiě)的地址值存入臨時(shí)數(shù)組中,并根據(jù)地址值判斷是否存在重復(fù)存儲(chǔ)的無(wú)效數(shù)據(jù),并將無(wú)效數(shù)組失效;

  清空Flash存儲(chǔ)區(qū),將臨時(shí)數(shù)組中有效的變量重新存入Flash中。

  通過(guò)這些步驟,將存儲(chǔ)區(qū)中存儲(chǔ)的變量讀出,并將存儲(chǔ)區(qū)中的重復(fù)的無(wú)效數(shù)據(jù)清除。下面是源代碼:

  #define pUint(address) *((uint *)(address)) #define PageSize 1024  //Stm32F103R8T6 1Page=1024Byte #define ParameterAddress (FLASH_BASE + (63 *  1024)) #define ParameterSpace PageSize / 4 / 2 static void  ReadAllParameter(void) { bool CleanFlag; int i, j;

  2.2 參數(shù)的寫(xiě)入

  參數(shù)的寫(xiě)入就很簡(jiǎn)單了,根據(jù)數(shù)據(jù)結(jié)構(gòu)中的寫(xiě)入點(diǎn),將變量的地址與值寫(xiě)入Flash中。

  static bool WriteParameter(void * dataPointer) {

  2.3 使用方法

  使用方法:

  每次上電啟動(dòng)時(shí),調(diào)用讀取全部變量的函數(shù);

  修改某個(gè)參數(shù)的時(shí)候,調(diào)用寫(xiě)參數(shù)函數(shù);

  三、注意事項(xiàng)

  在讀取參數(shù)時(shí),需要在RAM中建立一個(gè)ParameterSpace大小的數(shù)組,如果這個(gè)值太大,會(huì)超過(guò)棧的大小,使得內(nèi)存溢出。因此存儲(chǔ)區(qū)不能開(kāi)辟的太大。


四、總結(jié)

  這種方式使用簡(jiǎn)便,尤其是在更新變量值時(shí),根據(jù)存儲(chǔ)的變量地址更新相應(yīng)的值。其實(shí)其本質(zhì)與我們使用變量名來(lái)標(biāo)記不同的變量是一樣的。不過(guò)也有缺點(diǎn):

  首先其同時(shí)存儲(chǔ)變量的地址與變量的值,相當(dāng)于多使用一倍的存儲(chǔ)空間;

  像上面的注意事項(xiàng)中說(shuō)的,存儲(chǔ)區(qū)不能開(kāi)辟的過(guò)大,否則會(huì)使臨時(shí)數(shù)組超過(guò)棧的大小。


關(guān)鍵詞:技術(shù)干貨分享:嵌入式中參數(shù)存儲(chǔ)的一種方式嵌入式,參數(shù)存儲(chǔ),方式

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買(mǎi)家服務(wù):
賣(mài)家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見(jiàn),您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見(jiàn)一經(jīng)采納,將有感恩紅包奉上哦!