【升级】嵌入式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条回答
sunnydragon
1楼-- · 2019-12-25 00:53
li.wen 发表于 2015-8-11 21:08
目前这三个就覆盖了我所有的需求了。满足了

对指针类型有没有需求呢?
FireHe
2楼-- · 2019-12-25 05:23
sunnydragon 发表于 2015-8-12 20:42
对指针类型有没有需求呢?

常用的支持就可以了。不常用的,用户自己转换了再存呗。
10xjzheng
3楼-- · 2019-12-25 08:23
learner123 发表于 2015-6-14 17:00
关键看你怎么定义产品,或者说什么级别的产品。
一般,我所说的玩玩的产品,例如国内山寨级别的产品,没 ...

对于LZ的问题,那在小型的数据存储器中,你的数据的存储你是怎么解决的,有什么更好的方案分享啊?O(∩_∩)O哈哈~
又向下看了你的回复,那你能不能把那个“较好”的代码分享一下啊,自己水平有限,也希望多学习一下别人的优秀代码,支持开源,共同进步~O(∩_∩)O哈哈~
或者不开源代码,可以开源思路,思路比代码更重要~O(∩_∩)O哈哈~
qq302011
4楼-- · 2019-12-25 14:14
本帖最后由 qq302011 于 2015-9-20 11:04 编辑

能否添加一些对相应的宏定义的详细说明,比方说FLASH_ENV_SECTION_SIZE等,在使用中还是有些不太确定,比方说由于F407的FLASH是1M字节,前面几个SECTOR的大小较小,为了节省空间我需要把EASYFLASH使用到的空间定义在这些前面这几个SECTOR,
地址如下
0X08000000-0x08003fff  //程序空间
0X08004000-0X0800bfff //EASYFLASH使用
0x0800c000-0X0800ffff//自定义FLASH,我自己坐特殊使用
0X08010000-0x080fffff//程序空间

我不太确定使用环境变量之后,环境变量最大的使用地址会不会超过我的FLASH定义进入我的自定义地址空间,请楼主解答,谢谢

我现在的定义如下:

#define FLASH_ENV_USING_WEAR_LEVELING_MODE
//#define FLASH_ENV_USING_NORMAL_MODE

#define FLASH_ENV_START_ADDR            (FLASH_BASE + 16 * 1024) /* on the chip position: 256KB */
/* the minimum size of flash erasure */
#define FLASH_ERASE_MIN_SIZE            (16 * 1024)              /* it is 128K for compatibility */
#ifdef FLASH_ENV_USING_WEAR_LEVELING_MODE
/* ENV section total bytes size in wear leveling mode. */
#define FLASH_ENV_SECTION_SIZE          (2 * FLASH_ERASE_MIN_SIZE)/* 512K */
#else
/* ENV section total bytes size in normal mode. It's equal with FLASH_USER_SETTING_ENV_SIZE */
#define FLASH_ENV_SECTION_SIZE          (FLASH_USER_SETTING_ENV_SIZE)
#endif
qq302011
5楼-- · 2019-12-25 17:15
 精彩回答 2  元偷偷看……
sunnydragon
6楼-- · 2019-12-25 20:11
本帖最后由 sunnydragon 于 2015-9-20 18:50 编辑
qq302011 发表于 2015-9-20 11:49
#define FLASH_ENV_USING_CRC_CHECK
/* the user setting size of ENV, must be word alignment */
#define ...


https://github.com/armink/EasyFl ... /demo/env/stm32f4xx    这个是stm32f4xx平台下的Demo你可以直接打开使用的。

另外我看你使用还是比较旧版本的EasyFlash,建议采用Github上的最新源码,同时Github上还可以在线看到详细的文档,你说的那些宏定义介绍,在文档里面都有描述。

项目Github地址:https://github.com/armink/EasyFlash
项目在线文档地址:https://github.com/armink/EasyFlash/tree/master/docs/zh

一周热门 更多>