RT_Thread_msh_系统msh命令、使用msh时过滤ulog日志、添加msh命令(不带/带参)

本文详细介绍了RT-Thread中msh的配置方法,包括其自动开启、线程优先级以及调试过程中的使用。重点讲解了自带的msh命令,如系统命令和ulog提供的过滤功能。还展示了如何添加自定义msh命令和使用MSH_CMD_EXPORT。同时涵盖了ulog日志的管理,包括level取值、模块和全局级别过滤。
摘要由CSDN通过智能技术生成

1、msh配置

msh功能是自动开启的,配置如下,可以在“RT-Thread Settings”里去修改。

调试过程中遇到msh不能使用,理解msh也是一个线程,有自己的优先级20,高优先级的线程(比如main是10)如果一直执行,就会阻塞msh。

2、自带的msh命令

2.1、系统msh命令

因为开启了ulog日志功能,所以系统自带的msh命令会加上这一部分,输入“help”+回车,可以看到命令列表。

clear是清屏、version是打印内核版本、list会列出关于系统的各种信息、ps列出线程信息、free是查看内存使用、pin是控制GPIO、reboot重启系统;

2.2、ulog提供的msh命令

因为使用ulog功能,所以就会打印出很多日志信息,但是使用msh的时候又不希望这些信息刷屏,所以可以临时过滤日志方便交互、或者终端开启滚动锁定。

2.2.1、关于level的取值
  • 0:断言
  • 3:错误
  • 4:警告
  • 6:信息
  • 7:调试
2.2.2、按模块过滤 ulog_tag_lvl <tag> <level>
功能函数调用执行命令
关闭 wifi 模块全部日志ulog_tag_lvl_filter_set("wifi", LOG_FILTER_LVL_SILENT);ulog_tag_lvl wifi 0
开启 wifi 模块全部日志ulog_tag_lvl_filter_set("wifi", LOG_FILTER_LVL_ALL);ulog_tag_lvl wifi 7
设置 wifi 模块日志级别为警告ulog_tag_lvl_filter_set("wifi", LOG_LVL_WARNING);ulog_tag_lvl wifi 4
2.2.3、按全局级别过滤 ulog_lvl <level>
功能函数调用执行命令
关闭全部日志ulog_global_filter_lvl_set(LOG_FILTER_LVL_SILENT);ulog_lvl 0
开启全部日志ulog_global_filter_lvl_set(LOG_FILTER_LVL_ALL);ulog_lvl 7
设置日志级别为警告ulog_global_filter_lvl_set(LOG_LVL_WARNING);ulog_lvl 4

剩余内容见ulog官方手册:RT-Thread 文档中心-ulog日志

3、添加msh命令

添加msh命令有两步:写想要执行的函数,然后使用MSH_CMD_EXPORT导出;

3.1、MSH_CMD_EXPORT

MSH_CMD_EXPORT(name, desc);

 name是函数的名称,desc是description描述,也就是help列出命令后方展示的内容;

3.2、添加不带参数的msh命令

void hello(void)
{
    rt_kprintf("hello RT-Thread!\n");
}

MSH_CMD_EXPORT(hello , say hello to RT-Thread);

3.3、添加不带参数的msh命令

需要注意函数的参数格式为(int argc,char** argv)。

  • argc的类型是整型,代表参数的个数(包含函数名);
  • argv的类型是字符串数组指针,代表参数的内容(包含函数名);

下面的示例是官方的,在此基础上解释:

  • 1、msh输入:atcmd client
  • 2、解析msh命令:需要执行的函数是atcmd,传入的参数:argc=2,argv=["atcmd","client"]
  • 3、根据解析内容执行atcmd函数
static void atcmd(int argc, char**argv)
{
    if (argc < 2){
        rt_kprintf("Please input'atcmd <server|client>'\n");
        return;
    }

    if (!rt_strcmp(argv[1], "server")){
        rt_kprintf("AT server!\n");
    }else if (!rt_strcmp(argv[1], "client")){
        rt_kprintf("AT client!\n");
    }else{
        rt_kprintf("Please input'atcmd <server|client>'\n");
    }
}

MSH_CMD_EXPORT(atcmd, atcmd sample: atcmd <server|client>);

参考资料:

RT-Thread 文档中心 msh

RT-Thread 文档中心 ulog

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值