雖然 EEPROM 相對 Flash 讀寫速度更慢,但 EEPROM 一些獨有特性是 Flash 無法實現(xiàn)的,比如字節(jié)讀寫操作。
所以,EEPROM至今依然應(yīng)用在很多電子設(shè)備上,而且市場還不小。 這里就給大家分享一款EEPROM輕量級的簡易類文件的數(shù)據(jù)讀寫庫:EEPROMFS
1 關(guān)于EEPROMFS
EEPROMFS,基于EEPROM的簡易類文件的數(shù)據(jù)讀寫庫,方便做動態(tài)功能增減時參數(shù)管理。 增減參數(shù)塊類似增減文件,不會對已有數(shù)據(jù)存儲帶來影響。EEPROM硬件資源充裕的情況下使用。 開源地址: https://gitee.com/wtau_zaozao/eepromfs
2 使用說明和軟件架構(gòu) 開源庫使用說明: 基于 Arm 處理器,EEPROM存儲,比如24C256、24c512之類的相對較大一點容量的EEPROM存儲芯片。 軟件架構(gòu): EPPROM存儲區(qū)開頭存儲eepromfs管理相關(guān)信息,采用鏈表方式串聯(lián)每一個文件,每個文件建立的時候指定名稱和大小,新增加的文件自動追加在鏈表末尾。
typedef struct deepromfs_s{ eeprom_handle_t *handle; la_t startAddr1; efs_size_t size1; la_t startAddr2; efs_size_t size2; }deepromfs_t; static deepromfs_t deepromfs;
eepromfs_result_t deepromfs_init(eeprom_handle_t *handle,la_t startAddr,efs_size_t size) { eepromfs_result_t eepromfs_result1; eepromfs_result_t eepromfs_result2; //初始化 deepromfs.handle=handle; deepromfs.startAddr1=startAddr; deepromfs.size1=size/2; deepromfs.startAddr2=deepromfs.startAddr1+deepromfs.size1; deepromfs.size2=size/2; eepromfs_result1=eepromfs_init(deepromfs.handle,deepromfs.startAddr1); eepromfs_result2=eepromfs_init(deepromfs.handle,deepromfs.startAddr2); if((eepromfs_result1==EFR_OK)&&(eepromfs_result2==EFR_OK)) { return EFR_OK; } else if((eepromfs_result1==EFR_OK)&&(eepromfs_result2!=EFR_OK)) { //拷貝分區(qū)1數(shù)據(jù)到分區(qū)2 eepromfs_copy(deepromfs.handle,deepromfs.startAddr2,deepromfs.startAddr1,deepromfs.size1); return EFR_OK; } else if((eepromfs_result1!=EFR_OK)&&(eepromfs_result2==EFR_OK)) { //拷貝分區(qū)2數(shù)據(jù)到分區(qū)1 eepromfs_copy(deepromfs.handle,deepromfs.startAddr1,deepromfs.startAddr2,deepromfs.size2); return EFR_OK; } else if((eepromfs_result1==EFR_CRC_INFO_ERR)&&(eepromfs_result2==EFR_CRC_INFO_ERR)) { return EFR_CRC_INFO_ERR; } return EFR_ERR; } eepromfs_result_t deepromfs_format_quick(void) { eepromfs_result_t eepromfs_result; eepromfs_result=eepromfs_init(deepromfs.handle,deepromfs.startAddr1); if(eepromfs_result!=EFR_OK) { return eepromfs_result; } if(eepromfs_format_quick()!=EFR_OK) { return eepromfs_result; } eepromfs_result=eepromfs_init(deepromfs.handle,deepromfs.startAddr2); if(eepromfs_result!=EFR_OK) { return eepromfs_result; } eepromfs_result=eepromfs_format_quick(); if(eepromfs_result!=EFR_OK) { return eepromfs_result; } return EFR_OK; }提供各類格式化、讀、寫、刪除的函數(shù)接口,方便用戶直接調(diào)用:
eepromfs_result_t eepromfs_init(eeprom_handle_t *handle,la_t startAddr); eepromfs_result_t eepromfs_format_quick(void);//格式化不改變大小 eepromfs_result_t eepromfs_format_full(la_t startAddr,efs_size_t size);//格式化并重新指定大小 eepromfs_result_t eepromfs_new(file_handle_t *fh,const char* filename,efs_size_t fileSize); eepromfs_result_t eepromfs_open(file_handle_t *fh,const char* filename); eepromfs_result_t eepromfs_close(file_handle_t* fh); eepromfs_result_t eepromfs_write(file_handle_t* fh, const fdata_t* data, efs_size_t size); eepromfs_result_t eepromfs_offsetWrite(file_handle_t* fh,la_t offSet,const fdata_t* data, efs_size_t size); eepromfs_result_t eepromfs_read(file_handle_t* fh, fdata_t* buf,efs_size_t bufLen,efs_size_t *pFilesize); eepromfs_result_t eepromfs_delete(const char* filename); eepromfs_result_t eepromfs_copy(eeprom_handle_t *handle,la_t destAddr,la_t srcAddr,efs_size_t size);
總體而言,這個庫相對比較輕量級,普通ARM 單片機運行完全沒有壓力,具體源碼,可以參考:
https://gitee.com/wtau_zaozao/eepromfs
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7026瀏覽量
89026 -
存儲
+關(guān)注
關(guān)注
13文章
4314瀏覽量
85842 -
EEPROM
+關(guān)注
關(guān)注
9文章
1020瀏覽量
81597
原文標題:EEPROM簡易文件數(shù)據(jù)讀寫庫
文章出處:【微信號:c-stm32,微信公眾號:STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
基于Openharmony輕量級操作系統(tǒng)的分布式數(shù)據(jù)管理開發(fā)案例
![基于Openharmony<b class='flag-5'>輕量級</b>操作系統(tǒng)的分布式<b class='flag-5'>數(shù)據(jù)</b>管理開發(fā)案例](https://file.elecfans.com/web2/M00/26/21/pYYBAGG5jjSALfrEAAAwAa9Oig8799.png)
輕量級的ui框架如何去制作
木棉花:輕量級偏好數(shù)據(jù)庫學習筆記--沈泳鑫
基于輕量級偏好數(shù)據(jù)庫,實現(xiàn)存儲在本地應(yīng)用數(shù)據(jù)的訪問及操作
一種超輕量級的flashKV數(shù)據(jù)存儲方案分享
深度剖析OpenHarmony輕量級數(shù)據(jù)存儲
輕量級的SDN數(shù)據(jù)包轉(zhuǎn)發(fā)驗證方案
用于openharmony的輕量級、簡單的結(jié)構(gòu)化NoSQL數(shù)據(jù)庫
TinyDB輕量級數(shù)據(jù)庫有哪些特點呢
PSoC NeoPixel Easy輕量級庫
![PSoC NeoPixel Easy<b class='flag-5'>輕量級</b><b class='flag-5'>庫</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論