stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作

1 篇文章 0 订阅
1 篇文章 0 订阅

对stm32偏上flash的管理是一个很费劲的工作,尤其是写入数据较多时,需要创建大量的偏移量、缓存量等辅助变量。使用轻型、微型数据库可以有效解决这个问题。

我使用ArmInk大佬的EasyFlash数据库来管理stm32 片上flash。

gitee链接:https://gitee.com/Armink

EasyFlash很轻型,基本不增加RAM占用,增加少量FLASH占用,移植难度较低。

EasyFlash的移植工作由以下几部分组成:

1,gitee(github也可以,但gitee访问速度更快)上拉取最新EasyFlash源码:

我们需要inc、port、src3个文件夹,放在keil工程目录内

2,keil工程内增加引用路径:inc文件夹,工程内添加下图所示4个文件,需要使用EasyFlash的文件增加引用头文件:easyflash.h

3,移植工作还需要修改如下两个文件:

其中ef_port文件中包括flash的读取与擦除函数,需要我们自己实现;ef_cfg文件中包含重要的宏定义,需要自己设置。

3.1,ef_port:

第一点,需要给default_env_set数组增加一个内容。如果它是空的,easyflash会卡死在初始化函数

第二点,需要完善easyflash的读、写、擦除函数:

easyflash还支持诸如调试信息打印、调试日志输出等功能,篇幅所限只讨论flash数据库功能

3.2 ef_cfg文件

如果easyflash文件添加、包含路径添加后进行编译,会出大量错误与警告,原因是ef_cfg中几个核心宏定义未被赋值

对于hal库工程,已经定义好了flash_page_size,并且与所用stm32型号吻合,不需要查找datasheet再填入1024/2048之类,直接写flash_page_size就好;对于片外flash,需要阅读datasheet,这里只讨论片上flash 

ef_start_addr是片上flash开始使用的地址,在flash_Page_size = 1024的情况下图片中代表从80kb位置开始,到128kb截止(我使用的mcu flash为128kb。

4,最后,增加初始化函数就可以使用了,如下图:

easyflash核心是

一个负责读,一个负责写。

第一个参数是关键字,第二个是读写变量的地址,第三个为读写变量的大小,一定要与变量大小完全一致,不然可能会覆盖相邻变量,第四个为返回变量在flash中实际大小,我没有用到,null了。

写入函数的value值为null时表示删除,详情可以看easyflash的说明文档,还是很全面的。

  • 8
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值