0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

EEPROM轻量级的简易类文件的数据读写库:EEPROMFS

STM32嵌入式开发 来源:STM32嵌入式开发 2024-11-15 16:31 次阅读

虽然 EEPROM 相对 Flash 读写速度更慢,但 EEPROM 一些独有特性是 Flash 无法实现的,比如字节读写操作。

所以,EEPROM至今依然应用在很多电子设备上,而且市场还不小。 这里就给大家分享一款EEPROM轻量级的简易类文件的数据读写库:EEPROMFS

1 关于EEPROMFS

EEPROMFS,基于EEPROM的简易类文件的数据读写库,方便做动态功能增减时参数管理。 增减参数块类似增减文件,不会对已有数据存储带来影响。EEPROM硬件资源充裕的情况下使用。 开源地址: https://gitee.com/wtau_zaozao/eepromfs

8424785e-9072-11ef-a511-92fbcf53809c.png

2 使用说明和软件架构 开源库使用说明: 基于 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);

总体而言,这个库相对比较轻量级,普通ARM 单片机运行完全没有压力,具体源码,可以参考:

https://gitee.com/wtau_zaozao/eepromfs

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6853

    浏览量

    88759
  • 存储
    +关注

    关注

    13

    文章

    4241

    浏览量

    85606
  • EEPROM
    +关注

    关注

    9

    文章

    1010

    浏览量

    81365

原文标题:EEPROM简易文件数据读写库

文章出处:【微信号:c-stm32,微信公众号:STM32嵌入式开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于Openharmony轻量级操作系统的分布式数据管理开发案例

    实验内容本例程演示如何在小凌派-RK2206开发板上使用OpenHarmony轻量级操作系统进行KvStore(即分布式数据管理)数据读写。例程:(1)创建两个线程,一个负责写入KvS
    的头像 发表于 08-07 08:23 815次阅读
    基于Openharmony<b class='flag-5'>轻量级</b>操作系统的分布式<b class='flag-5'>数据</b>管理开发案例

    轻量级的ui框架如何去制作

    原创分享:自制轻量级单片机UI框架框架元素用户接口代码开源平时常看csdn,但是从来没有自己写过。正好这几天需要用单片机做一个简易的ui界面,于是自己写了一个轻量级的ui框架。发个csdn分享给大家
    发表于 07-14 07:39

    木棉花:轻量级偏好数据库学习笔记--沈泳鑫

    全量数据将会被加载在内存中的,使得访问速度更快,存取效率更高。如果对数据持久化,数据最终会落盘到文本文件中,建议在开发过程中减少落盘频率,即减少对持久化
    发表于 09-04 14:30

    基于轻量级偏好数据库,实现存储在本地应用数据的访问及操作

    (filename);说明轻量级偏好数据库支持数据库文件的创建、移动,数据的查询、插入、删除,以及支持注册观察者来观察数据是否发生变化。详细
    发表于 10-09 14:43

    一种超轻量级的flashKV数据存储方案分享

    tinyFlash一种超轻量级的flash KV数据存储方案Github 地址:https://github.com/ospanic/tinyFlash设计原理本方案采用两个扇区轮流使用的方法存储
    发表于 12-20 06:08

    深度剖析OpenHarmony轻量级数据存储

    一、轻量级数据存储的版本openharmony的轻量级数据存储现有两个版本,但是harmonyOS的官网上只有一个轻量级数据存储。二、应用目录的获取数据存储需要获取到应用的存放目录,便
    发表于 03-31 14:45

    轻量级的SDN数据包转发验证方案

    轻量级的SDN数据包转发验证方案
    发表于 06-08 11:29 10次下载

    用于openharmony的轻量级、简单的结构化NoSQL数据库

    用于openharmony的轻量级、简单的结构化 NoSQL 数据库。 下载 依赖项{ 实现“io.openharmony.tpc.thirdlib:ohos-NoSql:1.0.0” } 将数据
    发表于 04-13 10:05 2次下载

    TinyDB轻量级数据库有哪些特点呢

    TinyDB 是一个纯 Python 编写的轻量级数据库,一共只有1800行代码,没有外部依赖项。
    的头像 发表于 10-28 14:07 1409次阅读

    PSoC NeoPixel Easy轻量级

    电子发烧友网站提供《PSoC NeoPixel Easy轻量级.zip》资料免费下载
    发表于 11-17 09:48 0次下载
    PSoC NeoPixel Easy<b class='flag-5'>轻量级</b><b class='flag-5'>库</b>

    一个纯Python编写的轻量级数据库

    TinyDB 是一个纯 Python 编写的轻量级数据库,一共只有1800行代码,没有外部依赖项。
    的头像 发表于 02-24 10:32 784次阅读

    轻量级数据库有哪些

    轻量级数据库有哪些 随着互联网和物联网等新一代信息技术的广泛应用,数据库系统也变得越来越重要。人们对于数据库数据库的可靠性、安全性和性能等要求也越来越高。与传统的关系型
    的头像 发表于 08-28 16:41 5862次阅读

    TinyDB :一个纯Python编写的轻量级数据库

    TinyDB 是一个纯 Python 编写的轻量级数据库,一共只有1800行代码,没有外部依赖项。 TinyDB的目标是降低小型 Python 应用程序使用数据库的难度,对于一些简单程序而言与其用
    的头像 发表于 10-21 10:22 898次阅读

    轻量级数据库有哪些类型

    轻量级数据库是指具有小巧、灵活、高效的特点,适用于小规模项目和嵌入式设备的数据库管理系统。下面是对轻量级数据库类型的详细介绍,包括关系型数据库、非关系型
    的头像 发表于 12-20 11:29 1170次阅读

    鸿蒙语言基础:ohos.data.storage 轻量级存储

    轻量级存储为应用提供key-value键值型的文件数据处理能力,支持应用对数据进行轻量级存储及查询。数据存储形式为键值对,键的类型为字符串型
    的头像 发表于 07-15 18:21 915次阅读