# EasyFlash
[![GitHub release](https://img.shields.io/github/release/armink/EasyFlash.svg)](https://github.com/armink/EasyFlash/releases/latest) [![GitHub commits](https://img.shields.io/github/commits-since/armink/EasyFlash/4.1.0.svg)](https://github.com/armink/EasyFlash/compare/4.1.0...master) [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/armink/EasyFlash/master/LICENSE)
## 1、介绍([English](#1-introduction))
> **提示** :从 EasyFlash V4.1 后,基于 EasyFlash 全新设计开发的 [FlashDB](https://github.com/armink/FlashDB) 开源项目正式上线,新集成了时序数据库、多分区管理,多数据库实例等功能,也从一定程度上提升了整体性能,欢迎关注:https://github.com/armink/FlashDB 。同时,现有的 EasyFlash 也会继续维护。
[EasyFlash](https://github.com/armink/EasyFlash)是一款开源的轻量级嵌入式Flash存储器库,方便开发者更加轻松的实现基于Flash存储器的常见应用开发。非常适合智能家居、可穿戴、工控、医疗、物联网等需要断电存储功能的产品,资源占用极低,支持各种 MCU 片上存储器。该库主要包括 **三大实用功能** :
- **ENV** 快速保存产品参数,支持 **写平衡(磨损平衡)** 及 **掉电保护** 功能
EasyFlash不仅能够实现对产品的 **设定参数** 或 **运行日志** 等信息的掉电保存功能,还封装了简洁的 **增加、删除、修改及查询** 方法, 降低了开发者对产品参数的处理难度,也保证了产品在后期升级时拥有更好的扩展性。让Flash变为NoSQL(非关系型数据库)模型的小型键值(Key-Value)存储数据库。
- **IAP** 在线升级再也不是难事儿
该库封装了IAP(In-Application Programming)功能常用的接口,支持CRC32校验,同时支持Bootloader及Application的升级。
- **Log** 无需文件系统,日志可直接存储在Flash上
非常适合应用在小型的不带文件系统的产品中,方便开发人员快速定位、查找系统发生崩溃或死机的原因。同时配合[EasyLogger](https://github.com/armink/EasyLogger)(我开源的超轻量级、高性能C日志库,它提供与EasyFlash的无缝接口)一起使用,轻松实现C日志的Flash存储功能。
### 1.1 两种 ENV 模式
目前 ENV 功能有两种主要模式,一种为 V4.0 带来的 **NG** 模式,还有一种为延续 V3.0 的 **legacy** 模式
#### 1.1.1、V4.0 引入的 NG 模式
> 对应源码文件为: `ef_env.c`
自 2019 年春节后,EasyFlash 经过 4 年多的迭代,结合众多开发者的需求及建议,终于发布了 V4.0 版本,该版本中的 ENV 功能被命名为 **NG** (Next Generation) 模式,这是一个完全重构的新版本,具有以下新特性:
- 更小的资源占用,内存占用 **几乎为 0** ;(V4.0 以前版本会使用额外的 RAM 空间进行缓存)
- ENV 的值类型支持 **任意类型** 、任意长度,相当于直接 memcpy 变量至 flash ;(V4.0 之前只支持存储字符串)
- ENV 操作效率比以前的模式高,充分利用剩余空闲区域,擦除次数及操作时间显著降低;
- **原生支持** 磨损平衡、掉电保护功能 (V4.0 之前需要占用额外的 Flash 扇区);
- ENV 支持 **增量升级** ,固件升级后 ENV 也支持升级;
- 支持大数据存储模式,**长度无限制**,数据可在多个 Flash 扇区上顺序存储。像脚本程序、音频等占用 Flash 超过 1 个扇区的资源也都可以存入 ENV(即将在 V4.2 支持);
- 支持 **数据加密** ,提升存储的安全性,物联网时代的必备功能(即将在 V4.3 支持);
- 支持 **数据压缩** ,减低 Flash 占用(即将在 V4.4 支持);
V4.0 设计及内部原理,V4.0 迁移指南等更多内容请继续阅读下面的 [文档章节](#3文档)
> **注意** :个别 Flash 存在无法逆序写入的问题,例如 STM32L4 片内 Flash,所以无法使用 NG 模式,这种情况下建议使用 V3.0 的 legacy 模式
#### 1.1.2、延续 V3.0 的 legacy 模式
> 对应源码文件为: `ef_env_legacy.c` 及 `ef_env_legacy_wl.c`
**legacy** 模式也具有磨损平衡及掉电保护功能,相比于 V 4.0 NG 模式,使用 legacy 模式,需要有额外的 RAM 空间来临时缓存每个 ENV ,最终调用 save 接口,统一擦除扇区再存储到 Flash 上。
#### 1.1.3 ENV 模式对比
| | V4.0 NG 模式 | V3.0 legacy 模式 |
| -------------------- | ------------------------------------------ | ------------------------ |
| RAM 资源占用 | 低 | 高 |
| 支持 Flash 全面性 | 个别 Flash 受限:例如 STM32L4 片内 | 比较全面 |
| 是否需要 GC 垃圾回收 | 需要 GC ,这会导致触发 GC 时,写入速度变慢 | 不需要 |
| value 类型限制 | 无限制 | 对字符串类型支持的比较好 |
| 掉电保护 | 支持 | 支持 |
| 磨损平衡 | 支持 | 支持 |
| 增量升级 | 支持 | 支持 |
### 1.2、资源占用
```
最低要求: ROM: 6K bytes RAM: 0.1K bytes
```
### 1.3、支持平台
目前已移植硬件平台有 `stm32f10x`与 `stm32f4xx` 系列的片内Flash,片外的 SPI Flash(基于 [SFUD](https://github.com/armink/SFUD)),这些也是笔者产品使用的平台。其余平台的移植难度不大,在项目的设计之初就有考虑针对所有平台的适配性问题(64位除外),所以对所有移植接口都有做预留。移植只需修改 [`\easyflash\port\ef_port.c`](https://github.com/armink/EasyFlash/blob/master/easyflash/port/ef_port.c) 一个文件,实现里面的擦、写、读及打印功能即可。
欢迎大家 **fork and pull request**([Github](https://github.com/armink/EasyFlash)|[OSChina](http://git.oschina.net/armink/EasyFlash)|[Coding](https://coding.net/u/armink/p/EasyFlash/git)) 。如果觉得这个开源项目很赞,可以点击[项目主页](https://github.com/armink/EasyFlash) 右上角的 **Star**,同时把它推荐给更多有需要的朋友。
## 2、流程
### 2.1、ENV:环境变量(KV数据库)
下图为通过控制台(终端)来调用环境变量的常用接口,演示了以下过程,这些接口都支持被应用层直接调用。
- 1、创建“温度”的环境变量,名为 `temp`,并且赋值为 `123`;
- 2、保存“温度”到Flash中并重启(V4.0 版本的每个操作完自动保存,无需额外保存);
- 3、检查“温度”是否被成功保存;
- 4、修改“温度”值为 `456` 并保存、重启;
- 5、检查“温度”是否被成功修改;
- 6、删除“温度”的环境变量。
![easy_flash_env](/docs/zh/images/EnvDemo.gif)
### 2.2、IAP:在线升级
下图演示了通过控制台来进行IAP升级软件的过程,使用的是库中自带的IAP功能接口,演示采用的是串口+Ymodem协议的方式。你还也可以实现通过CAN、485、以太网等总线,来实现远程网络更新。
![easy_flash_iap](/docs/zh/images/IapDemo.gif)
### 2.3、Log:日志存储
下图过程为通过控制台输出日志,并将输出的日志存储到Flash中。重启再读取上次保存的日志,最后清空Flash日志。
![easy_flash_log](/docs/zh/images/LogDemo.gif)
## 3、文档
- API 文档:[`\docs\zh\api.md`](docs/zh/api.md)
- 移植文档:[`\docs\zh\port.md`](docs/zh/port.md)
- V4.0 迁移指南:[`\docs\zh\v4_migrate.md`](docs/zh/v4_migrate.md)
- V4.0 ENV 功能设计与实现:[`\docs\zh\
没有合适的资源?快使用搜索试试~ 我知道了~
XRobot是一套适用于微控制器、x86 Linux和模拟器的机器人开发框架.zip
共1140个文件
h:218个
c:184个
hpp:157个
0 下载量 122 浏览量
2024-05-21
06:58:34
上传
评论
收藏 7.01MB ZIP 举报
温馨提示
linux Linux操作系统嵌入了TCP/IP协议栈,协议软件具有路由转发功能。路由转发依赖作为路由器的主机中安装多块网卡,当某一块网卡接收到数据包后,系统内核会根据数据包的目的IP地址,查询路由表,然后根据查询结果将数据包发送到另外一块网卡,最后通过此网卡把数据包发送出去。此主机的处理过程就是路由器完成的核心功能。 通过修改Linux系统内核参数ip_forward的方式实现路由功能,系统使用sysctl命令配置与显示在/proc/sys目录中的内核参数。首先在命令行输入:cat /proc/sys/net/ipv4/ip_forwad,检查Linux内核是不是开启IP转发功能。如果结果为1,表明路由转发功能已经开启;如果结果为0,表明没有开启。出于安全考虑,Linux内核默认是禁止数据包路由转发的。在linux系统中,有临时和永久两种方法启用转发功能。 [3] 临时启用:此种方法只对当前会话起作用,系统重启后不再启用。临时开启的命令格式:sysctl–wnet.ipv4.ip_forward=1。
资源推荐
资源详情
资源评论
收起资源包目录
XRobot是一套适用于微控制器、x86 Linux和模拟器的机器人开发框架.zip (1140个子文件)
ef_env.c 59KB
stm32h7xx_hal_msp.c 48KB
main.c 40KB
stm32f4xx_hal_msp.c 38KB
main.c 36KB
w25q64.c 34KB
stm32f4xx_hal_msp.c 33KB
system_stm32f4xx.c 26KB
main.c 21KB
stm32g4xx_hal_msp.c 20KB
system_stm32h7xx.c 16KB
bsp_ble.c 15KB
stm32f4xx_it.c 15KB
stm32h7xx_it.c 15KB
main.c 15KB
system_stm32f1xx.c 14KB
system_stm32f1xx.c 14KB
system_stm32f1xx.c 14KB
stm32f4xx_it.c 14KB
stm32g0xx_hal_msp.c 12KB
stm32f1xx_hal_msp.c 11KB
system_stm32g0xx.c 11KB
stm32f3xx_hal_msp.c 11KB
stm32f1xx_hal_msp.c 11KB
main.c 11KB
system_stm32f3xx.c 11KB
main.c 11KB
bsp_can.c 10KB
system_stm32g4xx.c 10KB
main.c 10KB
stm32g4xx_it.c 10KB
stm32f1xx_it.c 10KB
stm32f1xx_it.c 10KB
stm32f3xx_it.c 9KB
main.c 9KB
stm32f1xx_it.c 9KB
ef_port.c 9KB
bsp_can.c 8KB
main.c 8KB
stm32f1xx_hal_msp.c 8KB
ef_port.c 8KB
bsp_can.c 7KB
bsp_can.c 7KB
bsp_can.c 7KB
usb_descriptors.c 7KB
usb_descriptors.c 7KB
usb_descriptors.c 7KB
usb_descriptors.c 7KB
usb_descriptors.c 7KB
usb_descriptors.c 7KB
bsp_uart.c 6KB
stm32g0xx_it.c 6KB
bsp_can.c 6KB
bsp_uart.c 6KB
ef_port.c 5KB
ef_port.c 5KB
ef_port.c 5KB
bsp_uart.c 5KB
bsp_uart.c 5KB
bsp_i2c.c 5KB
bsp_can.c 5KB
bsp_can.c 5KB
ef_port.c 5KB
bsp_uart.c 5KB
bsp_i2c.c 4KB
stm32f4xx_hal_timebase_tim.c 4KB
stm32f3xx_hal_timebase_tim.c 4KB
bsp_can.c 4KB
stm32f4xx_hal_timebase_tim.c 4KB
stm32g4xx_hal_timebase_tim.c 4KB
bsp_uart.c 4KB
ef_port.c 4KB
stm32h7xx_hal_timebase_tim.c 4KB
bsp_uart.c 4KB
easyflash.c 4KB
bsp_uart.c 4KB
bsp_uart.c 4KB
bsp_spi.c 4KB
bsp_uart.c 4KB
bsp_spi.c 4KB
bsp_spi.c 4KB
bsp_spi.c 4KB
bsp_spi.c 4KB
rtos.c 3KB
rtos.c 3KB
rtos.c 3KB
rtos.c 3KB
rtos.c 3KB
bsp_pwm.c 3KB
syscalls.c 3KB
sysmem.c 3KB
bsp_gpio.c 3KB
bsp_gpio.c 2KB
bsp_gpio.c 2KB
bsp_gpio.c 2KB
bsp_gpio.c 2KB
bsp_pwm.c 2KB
bsp_usb.c 2KB
bsp_gpio.c 2KB
bsp_gpio.c 2KB
共 1140 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
资源评论
野生的狒狒
- 粉丝: 3144
- 资源: 2313
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功