娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年02月06日(星期四)

正在發生

2021年02月06日 | STM32 Flash 均衡保存算法

發布者:MindfulYogi 來源: eefocus關鍵字:STM32  Flash  均衡保存算法 手機看文章 掃描二維碼
隨時隨地手機看文章

在實際應用中,經常需要在程序運行過程中保存或讀取一些數據,這些數據在工作中經常會變化,而且掉電后也不能丟失,所以需要及時地進行存儲,存儲這些數據常用的存儲器是 EEPROM


STM32 雖然本身不帶 EEPROM,但是它支持自編程技術,可以利用內部 FLASH 來模擬 EEPROM,這樣不僅簡化了設計,而且降低了成本。


FLASH 的擦寫次數是有限的,一般是 10W 次, FLASH 單個存儲單元bit只能從1變為0,而不能從0變成1。


想要變成1,只能 page 擦除,這里的 page 表示一個擦除單位,擦除過程就是把 page 所有的位都寫1,這種硬件特性決定需要一種比較高效的寫 flash 算法


總不能一次更改數值時擦除整一大片 FLASH。


1、均值保存算法


處理方法是將 1024 字節按 16 字節大小分成 64 等份,按后面格式存儲參數地址:


劃分:0x10*n +0x00 +0x01  +0x02 ... +0x0E  +0x0F


內容:       flag  data1  data2 ... data14 data15  check_sum


check_sum=(flag+data1+data2+...+data15)&0xFF


flag 為 0xA5 表示當前 16 個字節為正在使用的記錄,為其它值表示當前 16 字節已經丟棄。


這種保存方法是使用空間來換取擦寫次數。


2、具體實現


1)定義 FLASH 頁大小,儲存數據大小:


#define FLASH_PAGE      1024

#define FLASH_DATAPACK  16  

2)定義一個儲存結構體     


typedef struct {

  u32 Addr;            // 地址為 flash 一頁的首地址

  u8  Read;            // 讀地址的計數

  u8  Write;           // 寫地址的計數

  u8  ReadBuff[FLASH_DATAPACK];  // 讀取緩存區

  u8  WriteBuff[FLASH_DATAPACK];  // 寫入緩存區

} EEPROMTypeDef;

// FLASH 寫函數

void FlashWrite( EEPROMTypeDef *Flash_16 )

{

  u8 Flag;

  

  while_1:

  

  // 獲取標志位

  Flag = *(vu8*)(Flash_16->Addr + (Flash_16->Write) * FLASH_DATAPACK);

  

  if(Flash_16->Write < 64 && Flag == 0xff)     // 如果地址在一頁內且內容空白

  

  {

    HT_Flash_ByteWrite(Flash_16->WriteBuff, Flash_16->Addr + (Flash_16->Write++) * FLASH_DATAPACK,        FLASH_DATAPACK);

  }

  else if ( Flash_16->Write < 64 && Flag != 0xff ) // 如果地址在一頁內卻有數據存儲

  {

    Flash_16->Write++;

    

    goto while_1;

  }     

  else if(Flash_16->Write >= 64 ) // 如果地址不在一頁內

  {

    Flash_16->Write = 63;

  }

}

 

// FLASH 讀函數

void FlashRead(EEPROMTypeDef *Flash_16)

{

  u8 Flag;

  

  while_1:

 

  // 獲取標志位

  Flag = *(vu8*)(Flash_16->Addr + (Flash_16->Read) * FLASH_DATAPACK); 

 

  if( Flash_16->Read < 64 && Flag == 0xA5 )  // 如果地址在一頁之內且數據有效

  {

    HT_Flash_ByteRead(Flash_16->ReadBuff, Flash_16->Addr + (Flash_16->Read) * FLASH_DATAPACK, FLASH_DATAPACK);  

 

  HT_Flash_ByteWrite(00, Flash_16->Addr + (Flash_16->Read++) * FLASH_DATAPACK, 1);  // 標記數據無效

  }

  else if(Flash_16->Read < 64 && Flag != 0xA5) // 如果地址在一頁之內但數據無效

 {    

   if(Flag != 0xff)

    {                   

      Flash_16->Read++;

      

      goto while_1;

    }

  }     

 

  else if(Flash_16->Read >= 64)  // 如果地址不在一頁之內

  {

    Flash_16->Read = 0;

 

    Flash_16->Write = 0;

 

    HT_Flash_PageErase(Flash_16->Addr); // 頁擦除

  }

}


關鍵字:STM32  Flash  均衡保存算法 引用地址:STM32 Flash 均衡保存算法

上一篇:STM32 字節對齊 #pragma pack
下一篇:STM32 FLASH 掉電數據丟失處理策略以及備份機制

推薦閱讀

C&K 是全球最值得信賴的高品質機電開關品牌之一。公司的卓越的定制設計能力, 受全球需要可靠的開關性能的設計工程師所認可。 今年, C&K 將參展于 2018 年 3 月 14 至 16 日, 在上海新國際博覽中心舉辦的慕尼黑上海電子展。展位位于 E6 館 6115 號。我們將重點介紹 C&K 的開關怎樣為工業、汽車、高端消費和醫療行業的領先公司引領創新。...
在2004年由威爾·史密斯主演的科幻大片《我,機器人》中,片中的機器人公司亮出了一句響亮的廣告詞——“2035年,這是個機器的時代。”而現實生活中,機器手雖然在自動生產線等領域有越來越廣泛的應用,但它依然是冷冰冰工具的形象,具有高度智慧的機器人離普通人的生活依舊遙遠。不過,隨著近兩年人工智能迎來了一段爆發性成長之后,機器具備了更精準地獲...
目前,研發和生產經理以及工程師們正面臨著許多嚴峻的挑戰,而且每個團體也有著自身獨特的需求。例如在生產階段,工程師需要縮短測試時間,同時提高吞吐率和產量。此時最重要的就是速度。而在研發階段,最關鍵的則是能否更迅速地解決設計問題并減少重復作業。因此,在整個產品開發周期中,測試儀表的易用性至關重要。問題是這些“需求”與現有的測試和測量...
51單片機C語言運算符表:注意:在邏輯運算中,凡結果為“0”的數值即為真,等于“0”為假。

史海拾趣

問答坊 | AI 解惑

USB接口在串行通信中的應用

摘要:介紹USB接口在串行通信中的應用,討論USB接口同RS-232接口的轉換以及USB接口modem的簡化設計,并給出了實際中的產品樣圖。     1 USB接口簡介 USB即通用串行總線,可以實現熱插拔,采用菊花鏈結構,最多可以同時連接127臺設備 ...…

查看全部問答∨

我編的一個小程序

我編的一個小程序 void main(void) { /* put your own code here */ unsigned int t=0; DDRB=0XFF; PORTB=0XFF; for(t=0;t++;t<8){ PORTB-=1; } } 這是我編的一個小程序,我是想讓和B口相連的那8盞燈依次閃亮, ...…

查看全部問答∨

十分鐘學會Xilinx FPGA設計

不知道網站上有沒有,如果沒有發上來大家共同學習之, 如果有的話還勞架版主刪除…

查看全部問答∨

wince6.0的啟動問題

啟動wince6.0時,出現這樣一個問題 VBridge:: built on [Sep  6 2006] time [19:28:11] VBridgeInit()...TX = [16384] bytes -- Rx = [16384] bytes Tx buffer [0xA1CDFFE0] to [0xA1CE3FE0]. Rx buffer [0xA1CE4000] to [0xA1CE8000 ...…

查看全部問答∨

在build plateform后為什么沒有NB.bin文件

在PUBLIC下的相應的工程文件里為什么沒有NB.BIN文件啊.. 但上面沒有顯示編譯有問題啊 而且后來我在上面做了些修改,比如旋轉什么的后 再make image后,也沒有出現問題 但就是見不到NK.BIN文件啊…

查看全部問答∨

DIY數字濕度計資料匯總貼

【傳感器資料】給大家分享個溫濕度傳感器SHT21中文資料及代碼:http://bbs.eeworld.com.cn/thread-107984-1-3.html【資料集】C8051F320開發評估板資料:http://bbs.eeworld.com.cn/thread-110748-1-4.html【原理圖及器件清單】C8051版原理圖及PCB: ...…

查看全部問答∨

怎么讓nWave在顯示波形的時候顯示信號的層次

問個debussy的nWave看波形的問題。我加信號后都沒有層次結構的名稱啦。都是:signal_name1, signal_name2, signal_name3 等等,能不能把它配置到 hie_0/signal_name1, hie_0/signal_name2, 或是 hie_top/.../hie_0/signal_name1 等等啊…

查看全部問答∨

明天考試!MSC51習題求助!!大神來啊~

問題如下: 有一外部中斷源,接入INT0非端,當其中有中斷請求時,要求CPU把一個從內部RAM30H單元開始的50個字節的數據塊傳送到外部RAM從1000H開始的連續存儲區。請編寫對應的程序。   另注:題目沒有給出相應的電路圖,也沒有給出外部存儲 ...…

查看全部問答∨

請問大家在uCOS移植中關于uCOS_II.C這個文件

大家好,我看了不管是在51或者是在M3上移植uCOS,在例程中發現,都只是在uCOS的原文件中有uCOS_II.C這個文件.可是沒有發現具體在哪個文件中引用或者包含了此文件,請問uCOS_II.C文件有什么用呢?…

查看全部問答∨

【 信號處理】基于FPGA的超聲波信號處理研究

為了降低超聲波流量檢測過程中噪聲對檢測精度的影響,采用FPGA器件構建了FIR濾波器,并提出一種新穎的查表法替代濾波器中的乘法運算。試驗結果表明,該濾波器設計方法顯著降低了FPGA的片內硬件開銷,提高了濾波器的運算速度,并具有良好的降噪效果 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 荆门市| 牟定县| 福清市| 志丹县| 布拖县| 渝北区| 会东县| 大厂| 清水河县| 手游| 东兴市| 敦化市| 大城县| 中超| 平远县| 寿阳县| 阳东县| 普安县| 晋中市| 苏尼特右旗| 安龙县| 独山县| 色达县| 南和县| 孟州市| 理塘县| 罗江县| 花莲市| 本溪市| 游戏| 龙江县| 绍兴县| 龙岩市| 临颍县| 资阳市| 新源县| 肃宁县| 克东县| 富锦市| 元氏县| 黎城县|