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

歷史上的今天

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

正在發(fā)生

2021年02月06日 | STM32 FLASH 掉電數(shù)據(jù)丟失處理策略以及備份機(jī)制

發(fā)布者:鄭哥 來源: eefocus關(guān)鍵字:STM32  FLASH  備份機(jī)制 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

1、原因

由于FLASH的擦除和寫入的特性,如果在擦除中掉電或者寫入時(shí)掉電,有可能會(huì)出現(xiàn)失敗的情況,下次再上電讀取就會(huì)出錯(cuò)。


擦除的時(shí)候掉電,不能保證擦除完全,但是已經(jīng)擦除的部分,肯定是0xff了。


寫的時(shí)候掉電,已經(jīng)寫入的就是正確的,電平掉到最低極限工作電壓附近時(shí),寫入的就無法保證了,地址無法保證,寫入的值也無法保證。沒有寫到的,肯定還是 0xFF。??


2、解決方式

2.1、硬件方式解決 — 掉電保護(hù)機(jī)制?

必須硬件電路上有相應(yīng)的掉電警告中斷,而且必須有足夠的時(shí)間供軟件響應(yīng)。??

掉電保存和上電恢復(fù),需要以下:?

1) 快速檢測掉電信號(hào);

2) 要有足夠的時(shí)間讓你停下來保存現(xiàn)場;

3) 上電后可靠的復(fù)位;?

這些的關(guān)鍵是掉電信號(hào)電源復(fù)位信號(hào)三個(gè)怎么配合的事;

掉電保護(hù)不是重新擦寫那么簡單,首先要有一個(gè)機(jī)制能知道發(fā)生了掉電事件,還要知道什么地方的數(shù)據(jù)是可能出錯(cuò)的,如果是新建文件還好一點(diǎn),一般就是數(shù)據(jù)作廢,如果是改寫一個(gè)文件時(shí)發(fā)生掉電事故的話,還要有恢復(fù)機(jī)制,將數(shù)據(jù)恢復(fù)成改寫以前的數(shù)據(jù)。


由于 flash 的先擦后寫的特性,不會(huì)在原來位置重新寫數(shù)據(jù),一般都是把原位置的數(shù)據(jù)標(biāo)記為無效,再在新位置寫入數(shù)據(jù),對(duì)于文件來說有一個(gè)存儲(chǔ)位置的關(guān)系,這不同于文件系統(tǒng)的邏輯地址,每個(gè)邏輯地址要有對(duì)應(yīng)的物理地址,要有一套邏輯-物理地址的轉(zhuǎn)換映射關(guān)系在里面。


flash 空間總是有限的,還要有垃圾回收的機(jī)制,系統(tǒng)要將無效數(shù)據(jù)的存儲(chǔ)空間回收。

而 nand 的擦單元是寫單元的2的n次冪(如32,64,128)倍,如果一個(gè)擦除單元內(nèi)有有效數(shù)據(jù)的話,還要將有效的數(shù)據(jù)搬移到其它地方,要對(duì)相應(yīng)的文件的地址映射進(jìn)行更新維護(hù)。


擦寫均衡的實(shí)現(xiàn)也是一件比較復(fù)雜的事情,所以我們看到的U盤大小總是小于標(biāo)定的大小,因?yàn)樗鼉?nèi)部要保留一定區(qū)間用來實(shí)現(xiàn)FTL的算法,保存FTL層的數(shù)據(jù)。??


如果是這么個(gè)要求讓我重新設(shè)計(jì)一下硬件的話會(huì)有如下幾個(gè)部分:

1) 電源管理芯片,檢測掉電事件的發(fā)生;?

2) 儲(chǔ)能元件,在掉電發(fā)生后能滿足執(zhí)行掉電保護(hù)的操作即有足夠的時(shí)間存儲(chǔ)一些標(biāo)志位和必要的數(shù)據(jù);
?
一個(gè)電源檢測芯片,一個(gè)儲(chǔ)能元件(比如大點(diǎn)的電容)結(jié)合軟件判斷以及提前保存現(xiàn)場就能很好的實(shí)現(xiàn)掉電保護(hù)了.


2.2、軟件方式解決?

1)要改寫某扇區(qū)內(nèi)容,先把該扇區(qū)內(nèi)容備份到一個(gè)特殊的扇區(qū);?

2)在某個(gè)地方寫一個(gè)特殊的標(biāo)記;?

3)完成該扇區(qū)的改寫操作,清除標(biāo)記;?

4)系統(tǒng)每次上電或復(fù)位,都去檢查下標(biāo)記,就跟windows下的“磁盤掃描程序”一樣,即使最壞情況,也可以恢復(fù)改寫之前的數(shù)據(jù)。


這個(gè)過程“備份->置標(biāo)記->寫->清標(biāo)記”的辦法,是個(gè)可行的辦法,也是目前比較通行的辦法。


示例:

如下圖所示:

使用兩個(gè)sector互為備份,首先判斷valid,如果數(shù)據(jù)都有效,比較version看誰的數(shù)據(jù)比較新,使用最新的數(shù)據(jù)。


正常的情況下: 

1)初始化,sector 0和sector 1的valid值都為0xff,使用sector 0擦寫,version為0,valid為0x5a。 

2)第二次擦寫,sector 0的valid為0x5a,sector 1的valid為0xff,表明sector 1為無效數(shù)據(jù),使用sector 1擦寫,vesion在上次的基礎(chǔ)上加1,valid為0x5a。 

3)第三次擦寫,sector 0和sector 1的valid值都為0x5a,比較version,sector 1的version比sector 0大,所以使用sector 0擦寫,sector 1為備份數(shù)據(jù),version加1,valid為0x5a。 

4)依此類推,擦寫數(shù)據(jù)的過程中,version高的為最新數(shù)據(jù),version低的為備份數(shù)據(jù)。


掉電的情況下: 

1)如果在擦除sector 0的時(shí)刻掉電,前半部分?jǐn)?shù)據(jù)為0xff,后半部分?jǐn)?shù)據(jù)是舊數(shù)據(jù);重啟后比較valid都為0x5a,進(jìn)而比較version,因?yàn)樽钚聰?shù)據(jù)的version沒有寫進(jìn)去,所以sector 1的versoin較高,使用sector 1的舊數(shù)據(jù)。 

2)如果在擦完sector 0的時(shí)刻掉電,所有數(shù)據(jù)都為0xff;重啟后sector 1的valid為0x5a,使用sector 1的舊數(shù)據(jù)。 

3)如果在寫sector 0的時(shí)刻掉電,前半部分?jǐn)?shù)據(jù)為新數(shù)據(jù),后半部分?jǐn)?shù)據(jù)為0xff;重啟后sector 1的valid為0x5a,使用sector 1的舊數(shù)據(jù)。


相對(duì)網(wǎng)絡(luò)上搜索到的掉電備份方法(寫備份區(qū)-備份標(biāo)志-寫目標(biāo)區(qū)-清備份標(biāo)志),優(yōu)點(diǎn)是每次修改數(shù)據(jù)只需要擦寫一次,速度較快;缺點(diǎn)是存儲(chǔ)一個(gè)sector的數(shù)據(jù)需要兩個(gè)sector的空間。


注意:

這個(gè)標(biāo)記必須是單獨(dú)占用一個(gè)無用的扇區(qū)(沒有實(shí)際有用數(shù)據(jù)的扇區(qū)),保證對(duì)標(biāo)記的操作不會(huì)影響到實(shí)際數(shù)據(jù)。
?
二是這只能保證數(shù)據(jù)能恢復(fù)到之前的狀態(tài),不能確保數(shù)據(jù)結(jié)構(gòu)的完整性。


譬如你有一個(gè)數(shù)據(jù)結(jié)構(gòu)有16字節(jié)(它們之間是有邏輯關(guān)系的),跨兩個(gè)扇區(qū)保存,現(xiàn)在要全面更新這16個(gè)字節(jié)的數(shù)據(jù),如果發(fā)生某個(gè)扇區(qū)沒有成功更新(即恢復(fù)到之前的數(shù)據(jù)),就會(huì)發(fā)生新舊數(shù)據(jù)同時(shí)存在的情況,程序利用這些數(shù)據(jù)來操作,就有可能發(fā)生錯(cuò)誤。


所以,還需進(jìn)一步的機(jī)制來保證“整體數(shù)據(jù)結(jié)構(gòu)”的完整性,譬如某個(gè)文件的一部分?jǐn)?shù)據(jù)壞掉了,那么就把整個(gè)文件無效掉。

 

refer:

https://www.csdn.net/gather_2d/OtDaAg2sNjI0LWJsb2cO0O0O.html
https://blog.csdn.net/weixin_38664664/article/details/78167655


關(guān)鍵字:STM32  FLASH  備份機(jī)制 引用地址:STM32 FLASH 掉電數(shù)據(jù)丟失處理策略以及備份機(jī)制

上一篇:STM32 Flash 均衡保存算法
下一篇:STM32 分散加載文件 .sct 解析

推薦閱讀

外媒CBNC報(bào)道,德國汽車供應(yīng)商戴姆勒(Daimler)和博世(Robert Bosch)將在未來幾個(gè)月內(nèi)開始對(duì)無人駕駛的計(jì)程出租車進(jìn)行路測。博世CEO德納(Volkmar Denner)表示:“未來幾個(gè)月內(nèi),街道上將會(huì)有測試車輛。”梅賽德斯-奔馳的母公司戴姆勒(Daimler)和博世(Bosch)去年合作開發(fā)了一個(gè)聯(lián)盟,旨在加速自駕出租車的生產(chǎn),并且越來越多的競爭對(duì)手也加入了...
英國借助第一次工業(yè)革命崛起,成為了世界工業(yè)強(qiáng)國。而美國利用第二次工業(yè)革命,成為全球經(jīng)濟(jì)的霸主。每一次變革都會(huì)重新定義世界競爭格局,科技的進(jìn)步在推動(dòng)社會(huì)向前,如今,我們正在迎接智能化時(shí)代,機(jī)器人產(chǎn)業(yè)快速擴(kuò)張,人工智能成為了熱門的投資方向。由于傳統(tǒng)制造業(yè)依賴于人力勞動(dòng),而今天人力結(jié)構(gòu)已經(jīng)發(fā)生了變化,像日本等一些國家已經(jīng)出現(xiàn)老齡化問題...
內(nèi)容說明本發(fā)明涉及一種自動(dòng)啟膜式皂膜流量計(jì),屬于機(jī)械技術(shù)領(lǐng)域。發(fā)明背景隨著現(xiàn)代科學(xué)技術(shù)不斷發(fā)展,提高過程控制,流量準(zhǔn)確計(jì)量,變成十分重要的技術(shù)問題。特別地,對(duì)于微小氣體流量,流量的控制、氣流受環(huán)境溫度、壓力不同會(huì)導(dǎo)致氣體流量有較大的差異,準(zhǔn)確度也可能受多種因素影響而各不相同。因此要想正確測量并傳遞流量數(shù)據(jù),就要針對(duì)以上條件,研究...
1、STM32 啟動(dòng)文件與 .sct 文件分析1) 定義STACK段,{NOINIT,讀寫}:分配一段內(nèi)存大小為0.5K;2) 定義HEAP段, {NOINIT,讀寫}:分配一段內(nèi)存大小為1K;3) 定義RESET段,{DATA,只讀}:DCD各種中斷向量;4) 定義|.text|段,{CODE,只讀}:Reset_Handler函數(shù),函數(shù)中最后加載了__main;對(duì)剩余的中斷函數(shù)進(jìn)行了弱定義;在最后還有一段用戶初始化堆棧的...

史海拾趣

問答坊 | AI 解惑

跪求:步進(jìn)電機(jī)的連接電路

自己想用51單片機(jī)做一個(gè)玩玩,現(xiàn)在電機(jī)的型號(hào)還沒有選定,希望大俠們能給個(gè)建議,電路越簡單越好,…

查看全部問答∨

電容深入研究資料集

超級(jí)經(jīng)典,從另一方面深入了解電容的本質(zhì)與應(yīng)用!…

查看全部問答∨

尋找WINCE 開發(fā)高手

現(xiàn)有項(xiàng)目 個(gè)人 團(tuán)隊(duì)皆可合作 最好在廣州或者深圳 有意郵件yqb_box@163.com 或者QQ:437395559…

查看全部問答∨

149中斷問題

P1口中斷測脈沖個(gè)數(shù) 下降沿 為什么高頻時(shí)比較準(zhǔn)確 而低頻時(shí) 發(fā)現(xiàn)一個(gè)下降沿 會(huì)出現(xiàn)多次進(jìn)中斷的情況 #pragma vector=PORT1_VECTOR __interrupt void Pulse_counter(void) { P1IFG = 0X00; N1++; P1IFG = 0X00; ...…

查看全部問答∨

launchpad msp430g2553

g2553有沒有類似于  51單片機(jī)中code  的用法  就是在執(zhí)行程序的過程中不更改的量…

查看全部問答∨

msp430FG4691與CC2500無線發(fā)送程序中自動(dòng)復(fù)位問題

我是個(gè)初學(xué)者,有個(gè)問題困擾好多天,希望尋求各位的幫助。 程序測試收發(fā)數(shù)據(jù):發(fā)送端發(fā)送一個(gè)每個(gè)幾秒鐘變化的變量,在接收端的lcd上顯示出來。程序的開頭已關(guān)閉了看門狗,待發(fā)送的變量初值為0,發(fā)送變量的代碼是在while(1)中執(zhí)行,第一次執(zhí)行發(fā) ...…

查看全部問答∨

大學(xué)里verilog課程設(shè)計(jì)的一個(gè)頻率計(jì)報(bào)告(包含源代碼)

大學(xué)verilog課程做的一個(gè)頻率計(jì)的設(shè)計(jì)報(bào)告。設(shè)計(jì)思路以及各個(gè)模塊的程序代碼,寫的比較全,完全原創(chuàng),名字學(xué)號(hào)學(xué)校老師什么的刪掉了,所以第一頁是空白沒有排版。   用的verilog語言,測頻范圍為1Hz~100MHz,數(shù)碼管顯示,采用的生成 ...…

查看全部問答∨

購買基于單片機(jī)電動(dòng)車蹺蹺板系統(tǒng)

內(nèi)容:設(shè)計(jì)并制作一個(gè)電動(dòng)車蹺蹺板,在蹺蹺板起始端A一側(cè)裝有可移動(dòng)的配重。配重的位置可以在從始端開始的200mm~600mm范圍內(nèi)調(diào)整,調(diào)整步長不大于50mm;配重可拆卸。電動(dòng)車從起始端A出發(fā),可以自動(dòng)在蹺蹺板上行駛。要求:在沒有配重的情況下電動(dòng)車從 ...…

查看全部問答∨

請(qǐng)教一下msp-exp430f5529lp這塊板子怎么燒錄程序,還有CCS的.ccxml應(yīng)該怎么選擇

剛接觸msp430單片機(jī),以前玩51都是用isp下載的,沒有用過仿真機(jī),現(xiàn)在對(duì)msp430的程序燒錄一直沒搞清楚。 我用的是msp-exp430f5529lp這塊板,設(shè)備管理器上端口有UART1跟Debug Interface。CCS上工程的.ccxml文件選的是USB1-->msp430f5529,但是我D ...…

查看全部問答∨

段式液晶模塊的驅(qū)動(dòng)

本帖最后由 zhaojun_xf 于 2016-3-30 10:02 編輯 段式液晶由于其功耗低、價(jià)格便宜在很多家電中得到廣泛的應(yīng)用,其驅(qū)動(dòng)其實(shí)并不復(fù)雜,大多是情況下都是用HT1621B進(jìn)行驅(qū)動(dòng)。        HT1621是128 點(diǎn)內(nèi)存映象和多功能的LCD驅(qū)動(dòng) ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 香港 | 隆尧县| 嘉义县| 建瓯市| 武宁县| 赤城县| 和平县| 股票| 平阴县| 兴化市| 白银市| 驻马店市| 安国市| 扬中市| 南江县| 孟村| 延寿县| 浦北县| 合肥市| 台江县| 买车| 平泉县| 阜平县| 丰台区| 蛟河市| 舒城县| 襄樊市| 金阳县| 清涧县| 塔城市| 英超| 华阴市| 库尔勒市| 泊头市| 吐鲁番市| 万山特区| 洛川县| 仁化县| 新宁县| 衡东县| 郯城县|