【升级】嵌入式Flash闪存库EasyFlash,可以直接保存日志了

2019-12-14 12:52发布

EasyFlash 是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 三大实用功能
  • Env 让变量轻松实现掉电保存,支持 写平衡 模式,无需担心变量长度、磨损平衡等问题
使用 键值对(key-value) 方式将变量存储到Flash中。在产品上,能够更加简捷的实现 设定参数运行日志等信息掉电保存的功能。
  • IAP 在线升级再也不是难事儿
该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。
  • (新增)Log 无需文件系统,日志可直接存储在Flash上
非常适合应用在小型的不带文件系统的产品中。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现日志的Flash存储功能。
更多详细介绍,点击:https://github.com/armink/EasyFlash
原帖:http://www.amobbs.com/thread-5613261-1-1.html

更新日志
V1.06.10
  • 新增 Flash存储日志功能,无需文件系统的支持;
  • 删除 用户以前需要自定义的types.h头文件,全部采用C99自带头文件,降低移植复杂度;
  • 增加 C++ 编译器的支持;
  • 增加 环境变量同步锁,提升库在并发量较大的环境下的稳定性;
  • 修复 部分bug;


下载方式
Github:https://github.com/armink/EasyFlash
本坛下载: EasyFlash-V1.06.10.zip (6.9 MB, 下载次数: 344) 2015-6-10 19:18 上传 点击文件名下载附件
EasyFlash-V1.06.10



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
99条回答
qq302011
2019-12-27 03:32
sunnydragon 发表于 2015-9-21 18:11
1、恭喜~已经入门EasyFlash了,EasyFlash还有更多实用的功能有待你去挖掘。感谢你的FreeRTOS的移植分享。 ...

2、擦写平衡模式:3*EF_ERASE_MIN_SIZE(它将会有2个Flash扇区去存储环境变量,按照每个Flash扇区可被擦写10W次计算,那么当前配置至少可擦写20W次);
感觉楼主这个磨损平衡有点蛋疼,我的理解如下:
  1.必须要2块以上的SECTOR
  2.大概是这两个SECTOR交替写,写一次就要擦除一次二不管这个环境变量区域有多大。
  3.因此可以计算出最多可保存次数 就是 SECTOR个数*10W,注意有的FLASH只能保证擦写1W次则还要降低十倍
能不能这样做呢?、

不是写一次就要擦除一次FLASH,而是跟着FLASH后面继续写
  1.在整个环境变量结构体中头部 保留一个头部判断变量,start_flag=0xa5a5a5a5,有效数据判断变量为valid_flag=0XFFFFFFFF,则存入的数据格式表示如下
假设整个要存入的数据大小为size,
{
  0xa5a5a5a5,//开头标记
  0XFFFFFFFF,//数据有效标记
size, // 整个数据大小
xxxxxxxxxx, //其他的包头数据
。。。。。。。。。
sssssssssss,//环境变量
ssssssssss, //环境变量
sssssssssssssssssss//环境变量
。。。。。。。。。
ssssssssss//环境变量
ssssssss//环境变量
。。。。。。。。。。
0xa6a6a6a6,//末尾结束标记
}

  2.当下次再次保存环境变量的时候,将上一次的valid_flag数据设置为其他数据即可,代表上一次的环境变量木有用了,然后在后面存入本次要保存的数据结构即可

3.考虑到再次上电需要读取环境变量的时候,需要查找有效的查找到最后一次保存的数据,则从第一个0xa5a5a5a5找过去找到无效存储的size,指针一段一段的跳,几下就找到最后的写入位置了,因此也很快
  
罗里吧嗦写了这么多,不知道说清楚没,希望能对楼主有所帮助

一周热门 更多>