Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
easyflash
FAL 上的FlashDB、EasyFlash、EasyLogger调试经历
发布于 2020-09-27 00:29:20 浏览:7477
订阅该版
经过这几天的调试,一定要把这个经历写下来。。。。 #需求:实现设备运行期间的 日志打印,日志保存 ##第一阶段 发现 FlashDB pack 在移植 FlashDB的时候发现了,FAL这个管理中间层,它可以管理底层的任何存储介质 ###移植FAL 这个时候我发现FAL 需要一个 fal_cfg.h 的文件列表我可以加载STM32F407 Flash,可以使用SPI FLASH, - SPI Flash ,初始化SPI 后,增加fal_flash_sfud_port.c文件,对应的填写fal_cfg.h 中的表格就可以了,简单的就实现了。 - STM32F407 Flash,这个我直接添加fal_flash_stm32f4.c 文件,编译之后发现错误,原因是Hal库的flash文件未添加,我认为rtthread做的这么优秀,不可能出现自己添加的文件呀,无奈手动添加了一下,编译通过。自己强迫症,为什么需要手动添加,寻找库文件,我发现如下图依赖, ![4992E503-A308-43a0-BE20-0B4CE8BBFC0E.png](/uploads/20200926/356917201d9d04d6b4591a08a42d00db.png) 果断在board文件的kconfig中添加此依赖项,但是编译报错,因为还会带来一个文件drv_flash_f4.c,这个文件中的几个宏未定义,我添加上如下图所示![44C618C4-3A52-42a1-A1F4-627EC470789A.png](/uploads/20200926/af5411d8f24b160e8acf834ef4257d31.png) 对应的填写fal_cfg.h 中的表格就可以了。在main函数中调用fal初始化,这时候效果如下图所示 ![D2B2FB3D-51C8-4b7b-AA8A-1546A4E32044.png](/uploads/20200926/c955c84af95324700b3fe9bd20988bad.png) 然后移植,FlashDB 就很简单了,直接在ENV 中配置一下,就实现了 ##第二阶段 在写FlashDB的时候,发现这个Pack是刚刚开始的一些配套说明文件还未完全,对于我的项目可能并不适用,还是考虑用 EasyFlash + Easylogger吧,此时把FlashDB 组件删除,留下Fal,反正Fal就是管理存储介质的一个工具! ###移植EasyFlash 直接在Env中添加,这时候要注意配置,如下图![5DE53083-8B67-4f7c-8144-F29C0E3176B5.png](/uploads/20200926/c66bc134469314754c58c8e65abeffb9.png) 编译出错,读取写入文件没有,需要手动添加Port中ef_sfud_port.c 文件,还需要如下图所示,把fal_cfg.h 中定义的分区名字给EasyFlash,如下图所示 ![33EF4C62-ACC9-4aaf-8997-022D6F251045.png](/uploads/20200926/fdee4720673e9ed03f5557d9d1307ced.png) main函数中,添加easyflash初始化,此时编译下载,如下图 ![0C37AAAA-D0CE-40bc-B41F-BAE99B475A32.png](/uploads/20200926/0c24b27f228645fcca4d36312fb49e20.png) ###移植EasyLogger 直接在ENV中添加EasyLogger组件,此时需要注意一下各个分区大小,我存在SPI Flash中,设置如下的空间配置![BFF4885E-DCCB-4d9b-9C57-1EB202D3932C.png](/uploads/20200926/a605a5ddf78486064420df51b1db6f95.png)编译下载,这时候Fal + EasyFlash + EasyLogger 都成功了,如下图所示 ![1C08106D-A58E-4128-93FB-5946DFD59012.png](/uploads/20200926/b45825f3320fb8d8add6fffa84949359.png) 这时候遇到了一个问题,调试了将近一下午时间,我在添加这些之后习惯性的在Shell中输入Tab键输出支持的指令,我发现每次我输入Tab后设备都重启,找了好久问题,最后发现是看门狗溢出了。可能是Tab输出的字符比较多,在输出的时候使用的是循环空闲任务钩子函数喂狗未得到运行重启了吧。大家调试的时候,设备无辜重启,首先看看狗是不是没喂。 #改进 我在看论坛中得知,这个EasyLogger日志是可以存储在文件中的,并且RThread工程师已经实现了这个File文件存储的功能,那么我为什么不把这个文件存储一下,后期设备出现问题,我直接通过网络,把这个文件输出到计算机中,在计算机中查看那就方便多了,我不用麻烦的使用shell查看吧?那么问题来了,这个文件存储在哪里,第一感觉存储在文件系统中,那么文件系统可以构建在SPI FLASH上吧,这个是肯定的。 #那么问题1,我的Easy Flash 存储的Env 和 LOG 都是在SPI Flash中,我的文件系统是不是也可以挂载在SPI Flash 上呢?我的第一感觉是不行。。。就引来了第三阶段 ##第三阶段 Easy Flash 存储位置,放在Stm32 F407 片上存储,初始化Fal,如下图所示![39845768-0018-4213-8E17-29CDA3794DB3.png](/uploads/20200927/f4e50a2bb981d9293085b2b8d569aee8.png) 下载调试成功,接下来添加EasyFlash了开始,直接初始化配置空间如下图 ![B7A9E0A1-4861-417f-B973-3074FB3D0258.png](/uploads/20200927/2bc0f955dd1bd16abcadfcd1f7391451.png) 因为 SPI Flash 和 Chip Flash 地址擦除写入等空间不一致,所以做了调整。 这时候我初始化EasyFlash,发现报错了,如下图![Error.png](/uploads/20200927/2bed2842deb5ee72a561ff0cea4f2813.png) 跟中了一下代码发现,![0D10CA67-6AC0-47a2-AC23-2F49FDD2EABF.png](/uploads/20200927/ad6ec63dcf1479cc145cbf8548e5f008.png) 这里报错,意思是现在的地址,大于了这块的长度,那我就疑问了,0x080xxxxx地址,怎么都会大于我这片空间的长度呀。 #总结疑问 - 日志存储在文件中,文件是不是放在文件系统中? - 日志存储在文件中时,是不是把文件系统的起始地址,设置在Fal中(SPI Flash 为0.长度自己设定,不越界即可)?然后EasyFlash初始化的ef_port_init中直接把文件系统的分区名给他。EasyFlash的读写依然是SPI 的读写函数。 - EasyFlash配置文件中,有EF_START_ADDR为起始地址,有ENV_AREA_SIZE环境变量空间大小,有LOG_AREA_SIZE日志空间大小,但是没有日志的起始地址,是不是EF_START_ADDR + ENV_AREA_SIZE 也就等于了日志的起始地址呢? - 不管我的日志存储在哪的文件中,还是我上诉表述不清楚,或者我的思路有问题,但是我把EasyFlash 配置在Chip的Flash上都应该对呀,为什么会出现如下问题! ![CCE0681E-9200-4ae0-B38D-E9BFF99E2D14.png](/uploads/20200927/2bed2842deb5ee72a561ff0cea4f2813.png) 哎~直至今天,上诉这些问题刚刚好调试一周了!但是还未解决 #刚刚开始学习,思路可能有问题,大神勿怪。请熟悉了解的人麻烦指点一下,谢谢! @armink 抱歉再次打扰一下 Rtthread 朱工,因为这里大多数组件都是出自您的经典之作。
查看更多
whj467467222
认证专家
2020-09-28
开源,分享,交流,共同进步
建议写成文章,楼主太棒了
7
个回答
默认排序
按发布时间排序
liuduanfei
2020-09-27
这家伙很懒,什么也没写!
可以写成文章啊。
zhujie
2020-09-27
这家伙很懒,什么也没写!
#我知道问题所在了,记录下来,避免大家烦我这种低级错误。 Env中配置的Env Start Addr 应该设置成为 “0” ![Env.png](/uploads/20200927/44295d82544110d34aa6afff347fee27.png) 也就是代码中这个宏定义 ![daima.png](/uploads/20200927/d829704c1ee092f6b4b20ac43cbe85c3.png) 是相对于 fal 分区 EasyFlashEnv 的起始地址,而不是相对于chip Flash 的起始地址。 ![fal_cfg.png](/uploads/20200927/79e471dacaa6ef582e153ad8640691aa.png) 低级错误,不好意思! #开启PKG_EASYFLASH_LOG 接下来 开启PKG_EASYFLASH_LOG,注意分配空间大小,对应的修改Fal_cfg.h 文件配置大小,如下图所示 ![Log.png](/uploads/20200927/a8327126ea9fae23411352d651278be5.png) ![fal_cfg2.png](/uploads/20200927/53bb32911436f6a7548c999737333f5f.png) 至此,设备初始化成功,测试一下看看,测试代码直接参考RTthread官方demo,如下 ![Test.png](/uploads/20200927/5b758e526df4c79bb734ac7e5daa0eb0.png) 测试结果,再用fal看一下 ![TestShell.png](/uploads/20200927/d0f7e63910d3a8dc9210d826caf37b5b.png),对于这些“EF40”、“KV40”字段,我也不知道什么意思。。。 printenv看一下, ![printenv.png](/uploads/20200927/f42afb7f70b878ca7cde5027f210b477.png) 看着结果正常,先这样吧, #这些“EF40”、“KV40”字段,有大神知道什么原因,请指点。。。 ##下面是 EasyLogger 组件添加啦!
armink
2020-09-28
这家伙很懒,什么也没写!
楼主厉害了,终于把 Easy 全家桶用起来了,其实 EasyLogger 自动的文件插件应该是可以直接配合文件系统使用的,但是就得需要开启文件系统,系统的资源占用也会变的更大 如果追求轻量级,后面也可以试试 FlashDB 哈,KV 及日志存储功能一个软件包也都统统搞定,就是目前文档偏少,后面很快就会加强起来,敬请期待
apingrtt
2023-07-05
这家伙很懒,什么也没写!
EF40,KV40,是easyflash设置的模数。
大佬什么都会
2024-10-21
这家伙很懒,什么也没写!
你那个flash的偏移地址为什么都是从0偏移的?(bootloader和downloade这些的偏移地址)不会报错吗?或者被覆盖?
rcitach
2024-10-23
这家伙很懒,什么也没写!
建议写成文章,楼主太棒了
撰写答案
登录
注册新账号
关注者
0
被浏览
7.5k
关于作者
zhujie
这家伙很懒,什么也没写!
提问
27
回答
13
被采纳
2
关注TA
发私信
相关问题
1
easyflash 用来存储 传感器定时采样的数据适不适合?
2
easyflash存放于fat文件系统中,但是会擦除文件系统
3
EasyFlash移植失败,硬件发生错误?
4
easyflash demo擦写完数据后再上电就挂了?
5
easyflash初始化env无法自动写入默认环境变量?
6
有在STM32L4上用easyflash的么?请教个问题
7
[已解决] easyflash 使用内部 flash 无法保存参数
8
easyflash存储问题
9
easyflash可以用来存储300个小文件且能够按照日期分类检索吗?
10
easyflash不会删除旧的已有的变量名
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部