久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于嵌入式MCU數據Flash的數據存儲及管理方法研究與實現

基于嵌入式MCU數據Flash的數據存儲及管理方法研究與實現

——
作者:劉源楊 馬建輝 莊汝科 王崗 時間:2013-09-23 來源:電子產品世界 收藏

  通過為每個數據建立狀態字來表示是否已經在當前分區上進行了存儲操作,數據1的存儲操作便不會影響數據2的存儲,數據2仍然能夠在當前分區上進行存儲,而不會每次只要有數據的寫操作都會造成所有的數據在分區之間的搬移,這樣不僅提高了寫操作的效率,而且會進一步提高的使用壽命[7]

本文引用地址:http://www.cqxgywz.com/article/170167.htm

  分區拷貝操作

  在進行數據在分區間的拷貝操作時,首先備份當前最新分區狀態字和最新數據分區編號,然后更新最新數據分區編號,查看最新數據分區首地址是否是扇區首地址,如果是,執行扇區擦除操作[8],然后按照的寫操作命令序列在當前最新數據分區的data id地址處寫入data id,在data地址處寫入data,然后將備份數據分區內的其他數據復制到當前最新數據分區中。

  最新數據分區及狀態字更新

  最新數據分區編號的更新算法為:將最新數據分區編號加一,判斷其結果,如果最新數據分區編號等于分區個數,設置最新數據分區編號為0。狀態字更新算法為:判斷所備份最新數據分區狀態字是否等于0xfe,如果等于0xfe,設置最新分區狀態字為0,否則最新分區狀態字加一,然后將最新分區狀態字寫入當前最新數據分區狀態字地址,即數據分區首地址位置。

  掉電存儲

  如果系統在寫操作期間掉電,由于在發生掉電時最新數據分區狀態字還沒有更新,再次上電時查找到的最新數據分區仍然是寫操作進行前的那個數據分區,通過在寫入操作完成后更新狀態字的方式保證了即使發生了掉電,重新上電后數據仍能恢復為原來的數據分區中的數據。上電時通過分區狀態字查找最新數據分區的算法如下:

  (1)當存在取值為0的分區狀態字時,小于分區數的最大狀態字代表的分區為最新數據分區;
  (2)當不存在取值為0的分區狀態字時,最大狀態字代表的分區為最新數據分區;該算法實現流程如附圖3所示,上電后經過該算法處理后,可以得到最新數據分區編號和最新數據分區狀態字,其軟件代碼如下所示:

  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操作系統文章專題:linux操作系統詳解(linux不再難懂)


評論


相關推薦

技術專區

關閉