<abbr id="kc8ii"><menu id="kc8ii"></menu></abbr>
  • <input id="kc8ii"><tbody id="kc8ii"></tbody></input><table id="kc8ii"><source id="kc8ii"></source></table><kbd id="kc8ii"></kbd>
    <center id="kc8ii"><table id="kc8ii"></table></center>
  • <input id="kc8ii"></input>
    <abbr id="kc8ii"></abbr>
  • <abbr id="kc8ii"></abbr>
  • <center id="kc8ii"><table id="kc8ii"></table></center>
    <abbr id="kc8ii"></abbr>
    你的位置:首頁(yè) > 互連技術(shù) > 正文

    學(xué)了這么久的嵌入式,這個(gè)參數(shù)存儲(chǔ)訣竅你或許還不知道

    發(fā)布時(shí)間:2017-03-13 責(zé)任編輯:susan

    【導(dǎo)讀】如果有幾個(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ù)清除。下面是源代碼:
     
     
    2.2 參數(shù)的寫(xiě)入
     
    參數(shù)的寫(xiě)入就很簡(jiǎn)單了,根據(jù)數(shù)據(jù)結(jié)構(gòu)中的寫(xiě)入點(diǎn),將變量的地址與值寫(xiě)入Flash中。
     
     
    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ò)棧的大小。
    要采購(gòu)標(biāo)記么,點(diǎn)這里了解一下價(jià)格!
    特別推薦
    技術(shù)文章更多>>
    技術(shù)白皮書(shū)下載更多>>
    熱門(mén)搜索
    ?

    關(guān)閉

    ?

    關(guān)閉

    东京热加勒比无码视频| 中文字幕欧美日韩在线不卡| 无码福利写真片视频在线播放| 中文一国产一无码一日韩| 一本大道久久东京热无码AV| 天堂无码久久综合东京热| 午夜无码中文字幕在线播放 | 亚洲AV无码精品色午夜果冻不卡 | 欧美日本中文字幕| 无码人妻一区二区三区一| AV色欲无码人妻中文字幕| 最近的2019免费中文字幕| 少妇伦子伦精品无码STYLES| 国产亚洲美日韩AV中文字幕无码成人| 中文字幕精品亚洲无线码二区| 国产精品99精品无码视亚| 无码视频一区二区三区在线观看| 人妻无码中文字幕免费视频蜜桃 | 亚洲精品无码久久千人斩| 日韩av无码久久精品免费| 亚洲中文字幕无码久久综合网| 99国产精品无码| 精品久久久无码中文字幕天天| 久久人妻AV中文字幕| 免费VA在线观看无码| 精品无码人妻一区二区三区不卡| 精品无码AV无码免费专区| 亚洲成a人片在线观看中文动漫| 天天爽亚洲中文字幕| 亚洲AV无码成H人在线观看| 中文字幕无码久久精品青草 | 中文字幕人妻无码一夲道| 亚洲成av人片在线观看天堂无码| 88久久精品无码一区二区毛片 | 国产办公室秘书无码精品99| 久久男人Av资源网站无码软件| 无码精品黑人一区二区三区| 未满十八18禁止免费无码网站 | 爽到高潮无码视频在线观看| 国产激情无码一区二区三区| 精品人妻系列无码人妻免费视频|