1. RT-Thread msh命令基础与日志过滤实战
第一次用RT-Thread的msh(Micro Shell)时,我就被疯狂刷屏的日志整崩溃了。明明只想查个线程状态,结果满屏都是WiFi模块的调试信息——这简直是嵌入式开发者的"恐怖片"开场。后来发现,ulog日志系统和msh命令这对组合拳用好了,调试效率能翻倍。
先看msh的基础配置。在RT-Thread Settings里,msh默认是开启状态,它其实是个优先级为20的线程。这里有个坑:如果你的main线程优先级设为10还死循环,msh就会被彻底阻塞。我有个项目因此卡了三天,最后发现是线程优先级设错了。
系统内置的msh命令很实用:
ps:看线程状态(相当于嵌入式版的"任务管理器")free:查内存余量(防止内存泄漏的神器)pin:直接操作GPIO(调试硬件接口时能救命)
但最关键的还是ulog日志控制。当你在调试交互式功能时,可以这样驯服日志刷屏:
c复制// 关闭WiFi模块所有日志(世界瞬间清净)
ulog_tag_lvl wifi 0
// 只显示WiFi模块的错误日志(过滤掉无关调试信息)
ulog_tag_lvl wifi 3
// 全局设置日志级别为警告(适合生产环境)
ulog_lvl 4
实测发现,按模块过滤比全局过滤更实用。比如同时调试蓝牙和WiFi时,可以用ulog_tag_lvl bt 7只打开蓝牙调试日志,其他模块保持静默。这个技巧让我在调试无线通信时节省了至少40%的时间。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. ulog日志分级过滤的进阶技巧
日志级别就像给信息分"紧急程度":
- 0级(LOG_LVL_ASSERT):系统要挂了,必须处理
- 3级(LOG_LVL_ERROR):功能异常,需要修复
- 6级(LOG_LVL_INFO):正常流程提示
- 7级(LOG_LVL_DEBUG):魔鬼藏在细节里
建议开发时这样组合使用:
bash复制# 开发阶段:打开所有模块的调试日志
ulog_lvl 7
# 测试阶段:只保留错误和警告
ulog_lvl 4
# 现场问题复现:针对特定模块开启调试
ulog_tag_lvl sensor 7
ulog_tag_lvl wifi 3
遇到过最棘手
