我有一個應用程式,我必須將資料塊保存到閃存中。使用的閃存:https : //datasheet.datasheetarchive.com/originals/dk/DKDS-24/460477.pdf
在datasheet中提到我不能寫入已經寫入的頁面(即使它是半空的)。我想要一些關于管理記憶體寫入的最佳方法的建議?
- 我正在寫 25 個位元組的塊。
- 總頁面大小為 256 位元組
- 總頁數 16,384
- 最小擦除扇區:4KB(16頁)
我的問題:
- 我能想到的管理記憶體的唯一方法是有一個 4KB 的緩沖區,每次我想寫一些資料時,讀取最后 16 頁的資料并將其保存在緩沖區中。然后我可以擦除扇區并重寫以前的資料以及一個新塊。這是最常見的做法嗎?還有其他更好的方法嗎?
我能想到的唯一另一種方法是每頁簡單地寫入 1 塊資料,這聽起來完全浪費記憶體。但考慮到我有 16384 個頁面可用,保存 16384 塊資料對于我的應用程式來說可能綽綽有余。
- 使用一些 asci 字符來表示塊的結束是正常的做法嗎?例如使用十進制 13(回車)作為分隔符:
頁
[CHUNK1] 13 [CHUNK2] 13 [CHUNK3] ........
頁面結束
感謝所有的幫助。
uj5u.com熱心網友回復:
根據第 8.2.13 章,您可以寫入以前未寫入的位元組。因此,您不會為了能夠寫入幾個位元組而讀取目標頁面。只需使用正確的地址并寫入塊。
如果塊的大小固定,則不需要分隔符,特別是如果每??個塊的內容是二進制的。ASCII 分隔符是類流資料的解決方案。這將為您提供每頁 10 個塊。
萬一您想使用所有空間,您可以撰寫一個函式,該函式知道如何拆分一個塊以將其寫入兩個相鄰的頁面。想想某種 HAL,硬體抽象層。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/348687.html
上一篇:鏈接與編譯不清楚
