当前位置: 首页 > news >正文

【RTOS】EasyLog的移植与使用

当前log的突出问题:

①log不方便定位到源程序所在位置

②log不分主次,比较难生成想要的信息

1. 彩色log

1.1 编译器内置宏:__FILE__,__LINE__

led1下直接打印出当前文件的行号和名字

led2复制粘贴过来,改一下引脚

实验现象

哎呀是混乱的,忘加互斥锁了

互斥锁https://blog.csdn.net/2301_76153977/article/details/155972306?spm=1011.2124.3001.6209加上互斥加上互斥锁

在创建任务中 动态创建互斥锁

定义Mutex全局变量

等待互斥锁。解开互斥锁

实验现象:成功加入了.c文件和行号

解决了第一个问题:快速定位log的源文件

但是还没解决第二个问题:快速找到重要log信息的位置

1.2 让重要的关键字用不同的颜色或字体打印

定义一个count=0,每次灯亮灭都会count自增

自增的值大于10,变换颜色

另一个led也设置一下

编译

count有警报,是因为led1和led2使用了相同的count名称,我们把两个文件的count前都加一个static就好了(static:限制作用域,限制在当前文件中,别的文件看不见的

实验现象:

伟大的先驱们定的颜色转移协议:

printf(“\033[1;31;47mZNMCU.C.O.M hello ZNZB\033[0m")

俗称“基于ESC的屏幕控制”

1.3 彩色log实现

在创建任务中

独立执行体

实验现象:

2. 嵌入式log打印神器EasyLogger

2.1 测试一下EasyLogger的基本功能

点击进入EasyLogger

先看一下现象

2.2 测试一下EasyLogger分级打印功能

log的分级打印:普通信息错误警告

不同的函数用来打印不同级别的信息

把创建任务中的log_i改为log_e:

观察实验现象:

已经有条信息变成了红色

我们在第一章已经可以实现打印文件名和行号,本章呢除了这些,还能打印标签和时间戳

它来实现的此功能——

既然已经打印了文件名,还要标签干嘛?

一个项目可能包括多个.c文件,每个.c文件都会有相同的标签

2.3 测试一下EasyLogger的分级过滤功能(静态)

把它改为

创建任务中添加

相当于我们以d为分界线,观察过滤情况

实验现象:a e w i d显示出来了,d之后的v未显示,即v 被过滤掉了

我想过滤掉error呢?

修改

实验现象:果然e后的log都被过滤掉了

源代码中级别的设定如下,我们设置过滤的级别后,我们打印出来的内容是≤设置的级别

2.4 测试一下EasyLogger的分级过滤功能(动态)

更适用现场调试

打开znshell里的sys_cmd.c

在最后添加fll函数,用来动态log的过滤

fll函数什么意思?

一个 基于 ZNS Shell 的动态日志级别控制命令,核心作用是通过串口输入指令,快速修改 EasyLogger 的全局日志过滤级别,实现日志的动态过滤(只输出指定级别及以上的日志)。

1. 函数参数(int argc, char **argv)
这是 ZNS Shell 命令函数的固定参数格式:

  • argc:命令行输入的 参数总个数(包含命令名本身)。比如输入 fll 3,则 argc=2(argv[0] = "fll",argv[1] = "3")。
  • argv:字符串数组,存储每个参数。argv[0] 是命令名("fll"),argv[1] 是用户输入的日志级别(比如 "3")。

2. int level = 0;
定义整型变量 level,用于存储转换后的日志级别数值(默认初始化为 0)。
3. printf("fll set log filter level\r\n");
串口打印提示信息,告知用户当前正在执行 “设置日志过滤级别” 的操作(纯反馈,无实际功能)。
4. level = atoi(argv[1]);
核心转换步骤:
argv[1] 是用户输入的 字符串格式的级别(比如输入 fll 2,argv[1] 就是 "2")。
atoi() 函数:将字符串转为整数,让 EasyLogger 能识别(日志级别是整型枚举)。
5. printf("set level :%d\r\n", level);
串口打印确认信息,告知用户最终设置的级别数值(比如 set level :3),方便用户核对是否输入正确。
6. elog_set_filter_lvl(level);
最关键的 EasyLogger 接口调用:
功能:设置 全局日志过滤级别,只输出 ≥该级别 的日志(级别数值越小,过滤越严格)。
对应关系(EasyLogger 标准级别定义):

7. ZNS_CMD_EXPORT(fll, fll set log filter level);
ZNS Shell 的命令注册宏:
作用:将 fll 函数注册为 Shell 可识别的命令,让用户能在串口终端输入 fll 调用
参数 1:要注册的函数名(fll)。
参数 2:命令的描述信息(fll set log filter level),部分 Shell 支持 help 命令查看该描述。
函数使用场景
编译后,设备上电并通过串口连接终端(如 SecureCRT、Putty)。
在终端输入指令即可动态控制日志:
输入 fll 1 → 设置级别为 ERROR(只输出 ASSERT、ERROR 级日志,过滤其他)。
输入 fll 3 → 设置级别为 INFO(输出 ASSERT、ERROR、WARN、INFO 级日志)。
输入 fll 5 → 设置级别为 VERBOSE(输出所有级别日志,无过滤)。

最顶上添加头文件,atoi在stdlib.h里,elog_set_filter_lvl()在elog.h里

把这个改回来

main函数中不断打印

实验现象:

按下fll1

2.5 测试一下EasyLogger标签和关键字过滤功能

main程序中不断打印log

znshell中实现两个:

  1. 过滤的标签名
  2. 过滤的关键字

新建两个文件app_task.c和.h

sys.cmd.c中最后写一个函数,按照标签过滤

再写一个函数,按照关键字过滤

实验现象:

按下fllt APP

按下fllt MAIN

按下fllk is(只打印带有is关键字的)

3. EasyLogger的移植

别忘加了头文件cmsis_os.h,

编译一下试试,发现有错误

默认是异步方式,我们把所有的关于async的关掉

即把异步方式注释掉

实验现象:编译没有报错了,但是烧录后发现没有打印出来

三个工作方式

异步:不需要等待,把log_out放在另一个任务里,直接执行后续,log_out什么时候打印完就不是咱们关心的了

buffer:缓冲区填满后,统一打印出来,可以减少打印次数

同步:要死等log_out打印完才能执行下一步

异步方式关掉后,便在缓冲方式下工作:不立刻打印,当缓冲区占满,才会打印出来

实验现象:过了好久,突然全部打印出来

把缓冲方式的宏注释掉,关闭了缓冲方式,剩下的就是同步方式

有的平台需要\n,有的平台需要\r\n

实验现象:

http://www.jsqmd.com/news/111217/

相关文章:

  • 【系统架构】服务器部件说明
  • 2025年口碑好的河南铝合金卷帘门厂家最新权威实力榜 (1) - 朴素的承诺
  • zz六大 LangChain 支持向量库详细对比
  • 深入解析:Web安全攻防深度解析:从理论到实践的全方位防御指南
  • 测试博文标题 at 12/18/2025 7:24:53 PM
  • SpringBoot 单测
  • 测试博文标题 at 12/18/2025 7:24:26 PM
  • 2025CMEF聚焦胰岛素泵厂家创新成果:阿瑞医疗如意泵引领智能控糖新生态 - 品致汇
  • 完整教程:2025 数据分类分级工具核心技术路径对比与优劣分析
  • Jmeter命令行压测 生成HTML测试报告
  • SchoolDash Alpha冲刺随笔3 - Day 5
  • 从WRF到Transformer:6种Agent模型实战对比,结果令人震惊
  • 后端:没空,先自己 mock 去!
  • # 2025最新考勤系统五大品牌推荐!优质软件公司权威榜单发布 - 全局中转站
  • 圆周运动模型
  • 本地代码仓推送到Gitlab
  • 零售行业全域智能营销服务商推荐:从策略到实践,助力企业智能跃迁 - 资讯焦点
  • 告别AI生成痕迹!论文/文本降AI率全攻略(手动技巧 + 工具推荐 + 避坑指南) - 资讯焦点
  • STC89C52单片机直流电机的设计
  • 35岁大龄程序员突破中年危机魔咒:职业转型与个人成长的实用指南!
  • 洛谷题单一键转 vjudge 题单
  • 如何在国产化动环系统中实现智能调控与节能?
  • 详细介绍:Gemini 3 Pro深度解析:谷歌的“All in”时刻,AI霸权争夺战迎来终局?
  • 专题:2025年脑机接口产业蓝皮书:市场规模、专利技术、投融资与临床应用|附40+份报告PDF、数据、可视化模板汇总下载
  • 基于单片机的医院病房无线呼叫系统
  • Clipper2多边形处理技术深度解析与实战应用
  • 成都心理咨询机构推荐:权威测评与理性选择指南 - 资讯焦点
  • vue和springboot框架开发的健身爱好者线上互动与打卡社交平台系统_30q8t8nd
  • 通过 Chrome DevTools 打开帧率监视器
  • zz这两个zhihu系列仔细看看,尽量多动手