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

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

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

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

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

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

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

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第1张图片

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

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第2张图片

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

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第3张图片

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

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第4张图片

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

3.1,ef_port:

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

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

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第5张图片

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第6张图片

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第7张图片

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

3.2 ef_cfg文件

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

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

stm32 hal库+EasyFlash数据库完成片内FLASH的读写工作_第8张图片

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

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

easyflash核心是

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

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

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

你可能感兴趣的:(MCU,stm32,数据库)