EasyFlash —— 开源轻量级嵌入式 Flash 存储器库

简介:

EasyFlash是一款开源的轻量级嵌入式Flash存储器库,主要为MCU(Micro Control Unit)提供便捷、通用的上层应用接口,使得开发者更加高效实现基于的Flash存储器常见应用开发。该库目前提供 三大实用功能 :

Env 小型KV数据库,支持 写平衡(磨损平衡) 及掉电保护模式
让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。在产品上,能够更加简捷的实现 设定参数 或 运行日志等信息掉电保存的功能。

IAP 在线升级再也不是难事儿
该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。

Log 无需文件系统,日志可直接存储在Flash上
非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合EasyLogger(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。

1.1、资源占用

最低要求: ROM: 6K bytes RAM: 0.5K bytes + (Env大小)

Demo平台:STM32F103RET6 + RT-Thread 1.2.2 + Env(2K bytes)
实际占用: ROM: 6K bytes RAM: 2.6K bytes
1.2、支持平台

目前已移植硬件平台有 stm32f10x 与 stm32f4xx 系列的片内Flash,这个也是笔者产品使用的平台。其余平台的移植难度不大,在项目的设计之初就有考虑针对所有平台的适配性问题(64位除外),所以对所有移植接口都有做预留。移植只需修改 easyflashportef_port.c 一个文件,实现里面的擦、写、读及打印功能即可。

欢迎大家 star and pull request(Github|OSChina) 。开源软件的成功离不开所有人的努力,也希望该项目能够帮助大家降低开发周期,让产品更早的获得成功。

2、流程

2.1、Env:环境变量(KV数据库)

下图为通过控制台(终端)来调用环境变量的常用接口,演示了以下过程,这些接口都支持被应用层直接调用。

1、创建“温度”的环境变量,名为 temp,并且赋值为 123;
2、保存“温度”到Flash中并重启;
3、检查“温度”是否被成功保存;
4、修改“温度”值为 456 并保存、重启;
5、检查“温度”是否被成功修改;
6、删除“温度”的环境变量。
image
2.2、IAP:在线升级

下图演示了通过控制台来进行IAP升级软件的过程,使用的是库中自带的IAP功能接口,演示采用的是串口+Ymodem协议的方式。你还也可以实现通过CAN、485、以太网等总线,来实现远程网络更新。

image
2.3、Log:日志存储

下图过程为通过控制台输出日志,并将输出的日志存储到Flash中。重启再读取上次保存的日志,最后清空Flash中的日志。

image

文章转载自 开源中国社区 [http://www.oschina.net]

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
小程序 Linux 芯片
实用的嵌入式 C 程序!建议收藏
实用的嵌入式 C 程序!建议收藏
23 0
|
1月前
|
Linux C语言 C++
嵌入式
嵌入式
16 0
|
18天前
|
API 开发工具 C语言
【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
【嵌入式开源库】EasyLogger的使用, 一款轻量级且高性能的日志库
|
6月前
|
消息中间件
嵌入式:UCOS移植+简单创建任务
嵌入式:UCOS移植+简单创建任务
|
9月前
|
传感器 人工智能 安全
有什么是嵌入式不能满足的?
从20世纪60年代开始,嵌入式系统就已经开始出现,当时主要应用于航空航天、国防、工业自动化等领域
|
10月前
|
存储
day7嵌入式(2022.1.13)
day7嵌入式(2022.1.13)
52 0
|
10月前
|
数据安全/隐私保护 C语言
day12嵌入式(2022.1.18)
day12嵌入式(2022.1.18)
72 0
|
10月前
嵌入式day2(2022.1.7)
嵌入式day2(2022.1.7)
58 0
|
10月前
|
C语言
嵌入式day4(2022.1.10)
嵌入式day4(2022.1.10)
60 0
|
10月前
嵌入式day6(2022.1.12)
嵌入式day6(2022.1.12)
56 0