Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
easyflash
ulog
ulog_easyflash
ulog+easyflash初始化的注意事项
发布于 2022-05-30 17:03:20 浏览:746
订阅该版
[tocm] ## **背景介绍** `ulog`是用来打印日志的,`EasyFlash`是用来存储数据的,这两个软件包加在一起,就可以实现日志的掉电保存功能,并且支持日志打印等级的动态设置,这些等级等级可以存储在`EasyFlash`中,这样不需要每次上电都设置一次调试等级。 ## **问题介绍** 移植成功`EasyFlash+ulog`以后,我直接就在main函数中初始化了`EasyFlash`,因为`EasyFlash`依赖`FAL`,因此也需要先初始化`FAL`。而`ulog`是自动初始化的,我就没有对他进行初始化了。如下所示, ``` int main(void) { fal_init(); easyflash_init(); while (1) { rt_thread_mdelay(10); } } ``` 然后发现使用`ulog_lvl`命令设置的过滤等级在重启以后失效了,如下所示, ![2222.gif](https://oss-club.rt-thread.org/uploads/20220531/5113eea7a947a894782dca29c958b847.gif) ## **排查过程** 经过排查发现,当我们添加了软件包`ulog_easyflash`以后,查找`INIT_APP_EXPORT`这个自动初始化机制,会发现有两个相关的函数会自动初始化,请看下图 ![1.jpg](https://oss-club.rt-thread.org/uploads/20220530/c2e698836c482374e6c0930d29fbdf34.jpg.webp) `ulog_ef_backend_init`函数会将`EasyFlash`注册到`ulog`中,这样打印的时候,会同时将日志写入`EasyFlash`。因此,我们必须在此之前将`EasyFlash`初始化。 ``` int ulog_ef_backend_init(void) { flash_backend.output = ulog_easyflash_backend_output;//日志的输出函数,会写EasyFlash ulog_backend_register(&flash_backend, "easyflash", RT_TRUE); return 0; } ``` `ulog_ef_filter_cfg_load`函数会将`EasyFlash`中的参数读取出来,例如调试全局过滤等级、全局标签等级等等。这里面会读取`EasyFlash`的数据,所以我们必须在此之前将`EasyFlash`初始化。 ``` int ulog_ef_filter_cfg_load(void) { char *value; /* restore the saving global level */ if ((value = ef_get_env(ENV_FILTER_GLOBAL_LVL_NAME)) != NULL)//读取全局过滤等级,这里会去读取easyflash上的数据 { ulog_global_filter_lvl_set(atoi(value)); } /* restore the saving global tag */ if ((value = ef_get_env(ENV_FILTER_GLOBAL_TAG_NAME)) != NULL)//读取全局标签过滤等级,这里会去读取easyflash上的数据 { ulog_global_filter_tag_set(value); } ... return 0; } ``` ## **解决办法** 基于以上两点,我这里使用`INIT_COMPONENT_EXPORT`初始化机制,将`EasyFlash`在组件这层进行初始化,这样可以保证它初始化在`INIT_APP_EXPORT`之前。如下所示: ![5.png](https://oss-club.rt-thread.org/uploads/20220531/448836152933d9df375fdad9e53b23af.png) ![2.jpg](https://oss-club.rt-thread.org/uploads/20220530/9f210c585515042329e8776b7504a2c6.jpg.webp)
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
BruceTan
这家伙很懒,什么也没写!
文章
5
回答
31
被采纳
1
关注TA
发私信
相关文章
1
ulog_easyflash部分函数接口未实现问题
2
ulog_easyflash存储log时,出现扇区头错误,如下图,请大佬指点。
3
L475移植,包括fal+easyflash+ulog_easyflash
4
关于easylogger和easyflash
5
ulog_filter保存不了
6
ulog无法掉电保存过滤等级
7
env配置ulog+easyflash
8
ulog_easyflash 存满后去读取日志,系统重启
9
ulog_easyflash 若在写log的过程中掉电,上电后会擦除所有的log,有掉电保护开关吗?
10
Easylogger 日志扇区标头错误
推荐文章
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组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
ART-Pi
FinSH
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
cubemx
PWM
flash
packages_软件包
freemodbus
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
出出啊
1516
个答案
342
次被采纳
小小李sunny
1440
个答案
289
次被采纳
张世争
799
个答案
171
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
4
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部