经过这几天的调试,一定要把这个经历写下来。。。。
发现 FlashDB pack
在移植 FlashDB的时候发现了,FAL这个管理中间层,它可以管理底层的任何存储介质
这个时候我发现FAL 需要一个 fal_cfg.h 的文件列表我可以加载STM32F407 Flash,可以使用SPI FLASH,
在写FlashDB的时候,发现这个Pack是刚刚开始的一些配套说明文件还未完全,对于我的项目可能并不适用,还是考虑用 EasyFlash + Easylogger吧,此时把FlashDB 组件删除,留下Fal,反正Fal就是管理存储介质的一个工具!
直接在Env中添加,这时候要注意配置,如下图
编译出错,读取写入文件没有,需要手动添加Port中ef_sfud_port.c 文件,还需要如下图所示,把fal_cfg.h 中定义的分区名字给EasyFlash,如下图所示
main函数中,添加easyflash初始化,此时编译下载,如下图
直接在ENV中添加EasyLogger组件,此时需要注意一下各个分区大小,我存在SPI Flash中,设置如下的空间配置编译下载,这时候Fal + EasyFlash + EasyLogger 都成功了,如下图所示
这时候遇到了一个问题,调试了将近一下午时间,我在添加这些之后习惯性的在Shell中输入Tab键输出支持的指令,我发现每次我输入Tab后设备都重启,找了好久问题,最后发现是看门狗溢出了。可能是Tab输出的字符比较多,在输出的时候使用的是循环空闲任务钩子函数喂狗未得到运行重启了吧。大家调试的时候,设备无辜重启,首先看看狗是不是没喂。
我在看论坛中得知,这个EasyLogger日志是可以存储在文件中的,并且RThread工程师已经实现了这个File文件存储的功能,那么我为什么不把这个文件存储一下,后期设备出现问题,我直接通过网络,把这个文件输出到计算机中,在计算机中查看那就方便多了,我不用麻烦的使用shell查看吧?那么问题来了,这个文件存储在哪里,第一感觉存储在文件系统中,那么文件系统可以构建在SPI FLASH上吧,这个是肯定的。
Easy Flash 存储位置,放在Stm32 F407 片上存储,初始化Fal,如下图所示
下载调试成功,接下来添加EasyFlash了开始,直接初始化配置空间如下图
因为 SPI Flash 和 Chip Flash 地址擦除写入等空间不一致,所以做了调整。
这时候我初始化EasyFlash,发现报错了,如下图
跟中了一下代码发现,
这里报错,意思是现在的地址,大于了这块的长度,那我就疑问了,0x080xxxxx地址,怎么都会大于我这片空间的长度呀。
哎~直至今天,上诉这些问题刚刚好调试一周了!但是还未解决
@armink 抱歉再次打扰一下 Rtthread 朱工,因为这里大多数组件都是出自您的经典之作。
Env中配置的Env Start Addr 应该设置成为 “0”
也就是代码中这个宏定义
是相对于 fal 分区 EasyFlashEnv 的起始地址,而不是相对于chip Flash 的起始地址。
低级错误,不好意思!
接下来 开启PKG_EASYFLASH_LOG,注意分配空间大小,对应的修改Fal_cfg.h 文件配置大小,如下图所示
至此,设备初始化成功,测试一下看看,测试代码直接参考RTthread官方demo,如下
测试结果,再用fal看一下,对于这些“EF40”、“KV40”字段,我也不知道什么意思。。。
printenv看一下,
看着结果正常,先这样吧,
楼主厉害了,终于把 Easy 全家桶用起来了,其实 EasyLogger 自动的文件插件应该是可以直接配合文件系统使用的,但是就得需要开启文件系统,系统的资源占用也会变的更大
如果追求轻量级,后面也可以试试 FlashDB 哈,KV 及日志存储功能一个软件包也都统统搞定,就是目前文档偏少,后面很快就会加强起来,敬请期待
一遍开发,一遍拿出零散时间记录文档,全当做自己调试记录吧。。。