分享一款EEPROM简易类文件的数据读写库
来源:strongerHuang 发布时间:2024-07-04 分享至微信
作者 | zzao
来源 |Gitee
所以,EEPROM依然应用在很多电子设备上,而且需求量还很大。
关于eepromfs
eepromfs,基于EEPROM的简易类文件的数据读写库,方便做动态功能增减时参数管理。
增减参数块类似增减文件,不会对已有数据存储带来影响。EEPROM硬件资源充裕的情况下使用。
使用说明和软件架构
开源库使用说明:
基于 Arm 处理器,EEPROM存储,比如24C256、24c512之类的相对较大一点容量的EEPROM存储芯片。
软件架构:
EPPROM存储区开头存储eepromfs管理相关信息,采用链表方式串联每一个文件,每个文件建立的时候指定名称和大小,新增加的文件自动追加在链表末尾。
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))
{
//拷贝分区1数据到分区2
eepromfs_copy(deepromfs.handle,deepromfs.startAddr2,deepromfs.startAddr1,deepromfs.size1);
return EFR_OK;
}
else if((eepromfs_result1!=EFR_OK)&&(eepromfs_result2==EFR_OK))
{
//拷贝分区2数据到分区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;
}
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);
------------END------------
关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。
[ 新闻来源:strongerHuang,更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj]
存入云盘 收藏
举报
全部评论
暂无评论哦,快来评论一下吧!
strongerHuang
作者黄工,高级嵌入式软件工程师,CSDN博客专家,嵌入式领域知名号,专注分享嵌入式软硬件、AIoT(物联网+人工智能)、单片机、通信技术、开发工具、半导体、行业资讯等相关内容。
查看更多
相关文章
Q3全球手机销售榜单:三星、苹果主导,中国仅一款上榜
2024-11-13
富比库入选NVIDIA新创计划,推新一代电子零件数码平台
2024-10-24
美国司法部提交文件,考虑拆分谷歌反垄断
2024-10-10
华为数据存储发布新一代eKitStor SSD
2024-10-25
热门搜索