<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式MCU數(shù)據(jù)Flash的數(shù)據(jù)存儲(chǔ)及管理方法研究與實(shí)現(xiàn)

          基于嵌入式MCU數(shù)據(jù)Flash的數(shù)據(jù)存儲(chǔ)及管理方法研究與實(shí)現(xiàn)

          ——
          作者:劉源楊 馬建輝 莊汝科 王崗 時(shí)間:2013-09-23 來(lái)源:電子產(chǎn)品世界 收藏

            通過(guò)為每個(gè)數(shù)據(jù)建立狀態(tài)字來(lái)表示是否已經(jīng)在當(dāng)前分區(qū)上進(jìn)行了存儲(chǔ)操作,數(shù)據(jù)1的存儲(chǔ)操作便不會(huì)影響數(shù)據(jù)2的存儲(chǔ),數(shù)據(jù)2仍然能夠在當(dāng)前分區(qū)上進(jìn)行存儲(chǔ),而不會(huì)每次只要有數(shù)據(jù)的寫(xiě)操作都會(huì)造成所有的數(shù)據(jù)在分區(qū)之間的搬移,這樣不僅提高了寫(xiě)操作的效率,而且會(huì)進(jìn)一步提高的使用壽命[7]。

          本文引用地址:http://www.ex-cimer.com/article/170167.htm

            分區(qū)拷貝操作

            在進(jìn)行數(shù)據(jù)在分區(qū)間的拷貝操作時(shí),首先備份當(dāng)前最新分區(qū)狀態(tài)字和最新數(shù)據(jù)分區(qū)編號(hào),然后更新最新數(shù)據(jù)分區(qū)編號(hào),查看最新數(shù)據(jù)分區(qū)首地址是否是扇區(qū)首地址,如果是,執(zhí)行扇區(qū)擦除操作[8],然后按照的寫(xiě)操作命令序列在當(dāng)前最新數(shù)據(jù)分區(qū)的data id地址處寫(xiě)入data id,在data地址處寫(xiě)入data,然后將備份數(shù)據(jù)分區(qū)內(nèi)的其他數(shù)據(jù)復(fù)制到當(dāng)前最新數(shù)據(jù)分區(qū)中。

            最新數(shù)據(jù)分區(qū)及狀態(tài)字更新

            最新數(shù)據(jù)分區(qū)編號(hào)的更新算法為:將最新數(shù)據(jù)分區(qū)編號(hào)加一,判斷其結(jié)果,如果最新數(shù)據(jù)分區(qū)編號(hào)等于分區(qū)個(gè)數(shù),設(shè)置最新數(shù)據(jù)分區(qū)編號(hào)為0。狀態(tài)字更新算法為:判斷所備份最新數(shù)據(jù)分區(qū)狀態(tài)字是否等于0xfe,如果等于0xfe,設(shè)置最新分區(qū)狀態(tài)字為0,否則最新分區(qū)狀態(tài)字加一,然后將最新分區(qū)狀態(tài)字寫(xiě)入當(dāng)前最新數(shù)據(jù)分區(qū)狀態(tài)字地址,即數(shù)據(jù)分區(qū)首地址位置。

            掉電存儲(chǔ)

            如果系統(tǒng)在寫(xiě)操作期間掉電,由于在發(fā)生掉電時(shí)最新數(shù)據(jù)分區(qū)狀態(tài)字還沒(méi)有更新,再次上電時(shí)查找到的最新數(shù)據(jù)分區(qū)仍然是寫(xiě)操作進(jìn)行前的那個(gè)數(shù)據(jù)分區(qū),通過(guò)在寫(xiě)入操作完成后更新?tīng)顟B(tài)字的方式保證了即使發(fā)生了掉電,重新上電后數(shù)據(jù)仍能恢復(fù)為原來(lái)的數(shù)據(jù)分區(qū)中的數(shù)據(jù)。上電時(shí)通過(guò)分區(qū)狀態(tài)字查找最新數(shù)據(jù)分區(qū)的算法如下:

            (1)當(dāng)存在取值為0的分區(qū)狀態(tài)字時(shí),小于分區(qū)數(shù)的最大狀態(tài)字代表的分區(qū)為最新數(shù)據(jù)分區(qū);
            (2)當(dāng)不存在取值為0的分區(qū)狀態(tài)字時(shí),最大狀態(tài)字代表的分區(qū)為最新數(shù)據(jù)分區(qū);該算法實(shí)現(xiàn)流程如附圖3所示,上電后經(jīng)過(guò)該算法處理后,可以得到最新數(shù)據(jù)分區(qū)編號(hào)和最新數(shù)據(jù)分區(qū)狀態(tài)字,其軟件代碼如下所示:

            static void FindNewestBankByStatusWord(void)
            {
            Bool roll_over;
            uint8_t bank;
            uint16_t bank_status;
            uint16_t largest_status = 0;
            Bool erased = TRUE;
            roll_over = StatusWordIsRollover();
            for(bank = 0;bank < _BANKS;bank++){
            bank_status = READFLASH16(_START + (bank * _SIZE_BYTES));
            if(FLASH_ERASED_WORD != bank_status){
            erased = FALSE;
            if(TRUE == roll_over){
            if((bank_status < EEPROM_BANKS) && (bank_status >= largest_status)){
            Active_bank = bank;
            largest_status = bank_status;
            }
            }else{
            if(bank_status > largest_status){ Active_bank = bank;
            largest_status = bank_status;
            }
            }
            if(TRUE == erased){ Active_bank = 0;
            (void)EraseEepromBank(EEPROM_START);
            }
            }

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();