使用NVRAM的簡單解決方案
許多供應商提供專為NVRAM使用的現成檔案系統軟體。除非要求某些專門功能,否則開發人員自行設計在經濟上會所產生的問題。資料結構的儲存主要是針對特定應用程式的,因此將進一步解決。本文晶片儲存器供應商宇芯電子介紹關於使用NVRAM的簡單解決方案。
非易失性使用普通的易失RAM很簡單。上電時必須將其初始化為一個已知值,然後可以根據需要對其進行寫入和讀取。藉助
,面臨兩個新挑戰:
•開機時,軟體需要識別NVRAM是否已初始化,如果尚未初始化,請執行該初始化。
•資料的完整性,尤其是斷電一段時間後,需要進行驗證。
NVRAM初始化
首次啟動NVRAM時,就像普通RAM一樣,它包含不確定的資料,需要初始化。在隨後的情況下,軟體需要識別NVRAM已初始化,並且不會覆蓋此儲存的資料。
進行這種識別的最簡單方法是使用簽名,該簽名只是可以快速識別的位元組序列,不能隨機出現。這種理想是不可能的,因為任何位元組序列(無論多長)都可能隨機發生。只是最大程度地減少這種可能性,同時仍然使檢查變得快捷容易。如果簽名只有4個位元組,則隨機發生簽名的可能性為40億比1。對於幾乎所有可以想象的應用程式來說已經足夠了。並且可以快速檢查32位值。
透過仔細選擇簽名值便可以減少意外發生的機會。一個連續的數字序列(例如1、2、3、4)比“隨機”集合感覺不太可能。畢竟最後一次是什麼時候產生連續的數字序列的?當然這種序列與其他序列一樣可能或不太可能。但是透過考慮記憶體的工作方式,特定序列的可能性可能會增加。首次開機時的記憶體可能具有哪些值?大致有四種可能性:
1、完全隨機
2、全零
3、所有的
4、一些反映晶片架構的規則模式(例如交替的1和0)
如果為(1),那麼任何簽名都會給我們40億比1的機會。其他任何一個都可以透過使用正確的簽名來檢測。可能的情況如下:0x00、0xff,0xaa,0x55。這應該覆蓋所有(2),(3)和(4),但仍僅為32位。
初始化序列需要謹慎。設定有效資料,然後將簽名初始化為過程中的最後一件事是至關重要的。
完整性
當然,使用簽名並不能保證資料的完整性。使用校驗和或CRC進行錯誤檢查,甚至使用資料自校正機制都是明智的。
使用NVRAM進行系統啟動
當使用NVRAM時,啟動邏輯需要容納簽名驗證和資料完整性檢查:
結論
在嵌入式設計中使用NVRAM很簡單,但是確實需要按此處所述小心地適應其功能。使用全域性簽名和錯誤檢查的方法適用於許多應用程式。對於非常大的資料庫,單獨檢查每個資料塊可能會更有效率。使用C ++對應用程式程式碼開發人員隱藏NVRAM管理,從而最大程度地減少程式設計師錯誤的可能性,也可能是值得的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69975830/viewspace-2719470/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 簡單的mock-server 解決方案MockServer
- 簡單的瞭解跨域以及解決方案跨域
- 一個簡單的統計問題(解決方案:Trie樹)
- 超簡單的前端跨域、前後端分離解決方案前端跨域後端
- mpvue使用sass的解決方案Vue
- mpvue 使用sass的解決方案Vue
- drools決策表的簡單使用
- 簡單介紹Nginx tp3.2.3 404問題解決方案Nginx
- 使用Promise解決多層非同步呼叫的簡單學習Promise非同步
- 從程式設計師到解決方案架構師的簡單指南 - Dev程式設計師架構dev
- WiNet智慧網路解決方案解讀 讓網路運維更簡單運維
- Hadoop中Namenode單點故障的解決方案Hadoop
- LiveNode.js 超簡單的前端跨域、前後端分離解決方案Node.js前端跨域後端
- SpringBoot使用外部Web容器的解決方案Spring BootWeb
- 簡訊介面防盜刷解決方案
- SpringBoot dubbo 的簡單使用註解版本Spring Boot
- v-selectmenu 更新至 2.0.1 - 簡潔、易用、高定製化的選單解決方案
- 讓大型機構的管理和災備更簡單:一雲多Region解決方案
- 成功解決PyCharm 彈出 Server‘s certificate is not trusted 的簡單解決方法PyCharmServerRust
- ORA-01113,ORA-01110的簡單解決
- 使用laravel解決庫存超出的幾個方案Laravel
- 單元件多UI形態的終極解決方案(React)元件UIReact
- 使用go效率工具一小時輕鬆搭建一個簡單可靠的訂單系統,使用dtm解決分散式事務超級簡單Go分散式
- Kdevelop的簡單使用和簡單除錯dev除錯
- Web 安全漏洞 SSRF 簡介及解決方案Web
- 以太坊擴充套件解決方案Nahmii簡介套件
- 用最簡單的例子講解js中解決非同步的方法JS非同步
- postman的簡單使用Postman
- OD的簡單使用
- RocketMQ的簡單使用MQ
- docker的簡單使用Docker
- SXSSFWorkbook的簡單使用
- peewee的簡單使用
- LayUi的簡單使用UI
- Vue簡單的使用Vue
- uuid的簡單使用UI
- git的簡單使用Git
- RecyclerView的簡單使用View