ulog输出到flash-基于FlashDB
ULOG_TSDB搭建详解
一、依赖
1、打开FAL,挂载好片内/片外Flash,设置分区表
2、打开FlashDB、ulog组件
3、使能硬件RTC
二、实现
1、后端设备初始化
主要实现原理:把tsdb作为ulog输出的后端设备,实现保存日志数据到flash中
仿照console_be.c文件实现tsdb_be.c,参考官方文档ulog日志-日志后端
console_be.c是实现把控制台作为后端设备输出ulog数据
主要需要实现ulog_tsdb_backend_init函数和ulog_tsdb_backend_output函数,再通过INIT_ENV_EXPORT导出命令在系统初始化时执行
tsdb_be.c实现如下👇
#include <rthw.h>
#include <ulog.h>
//需要先在rtconfig.h中定义该宏
#ifdef ULOG_BACKEND_USING_TSDB
#if defined(ULOG_ASYNC_OUTPUT_BY_THREAD) && ULOG_ASYNC_OUTPUT_THREAD_STACK < 384
#error "The thread stack size must more than 384 when using async output by thread (ULOG_ASYNC_OUTPUT_BY_THREAD)"
#endif
extern int ulog_tsdb_init(void );
extern void ulog_tsdb_append(const char *str,size_t len);
static struct ulog_backend tsdb;
void ulog_tsdb_backend_output(struct ulog_backend *backend, rt_uint32_t level, const char *tag, rt_bool_t is_raw,
const char *log, size_t len)
{
ulog_tsdb_append(log,len);
}
int ulog_tsdb_backend_init(void)
{
ulog_init();
tsdb.output = ulog_tsdb_backend_output;
ulog_tsdb_init();
ulog_backend_register(&tsdb, "tsdb", RT_TRUE);
return 0;
}
INIT_ENV_EXPORT(ulog_tsdb_backend_init);
#endif /* ULOG_BACKEND_USING_TSDB */
2、TSDB功能实现
主要实现初始化、追加、查询(全部/日期区间)、清除功能,并把查询、清除功能导出到MSH命令中
①tsdb初始化
//在tsdb_be.c的后端设备初始化时调用
int ulog_tsdb_init(fdb_tsdb_t tsdb);
//该函数主要调用官方API👇
//参数意义:TSDB结构体、TSDB分区名称、挂载分区名称、时间戳回调函数、用户自定义数据
fdb_tsdb_init(&_global_tsdb, "

本文介绍如何利用ULOG_TSDB将日志数据存储到Flash中,包括后端设备初始化、追加、查询和清除日志数据等功能,并提供MSH命令实现日志查询和清除。
最低0.47元/天 解锁文章
801

被折叠的 条评论
为什么被折叠?



