RT-thread —- FinSH 控制台

RT-thread —- FinSH 控制台一、介绍FinSH是RT-Thread的命令行组件(shell),有了shell,就像在开发者和计算机之间架起了一座沟通的桥梁,开发者能很方便的获取系统的运行情况,并通过命令控制系统的运行。特别是在调试阶段,有了shell,开发者除了能更快的定位到问题之外,也能利用shell调用测试函数,改变测试函数的参数,减少代码的烧录次数,缩短项目的开发时间。FinSH支持两种输入模式…

大家好,又见面了,我是你们的朋友全栈君。

一、介绍

FinSH 是 RT-Thread 的命令行组件(shell),有了 shell,就像在开发者和计算机之间架起了一座沟通的桥梁,开发者能很方便的获取系统的运行情况,并通过命令控制系统的运行。特别是在调试阶段,有了 shell,开发者除了能更快的定位到问题之外,也能利用 shell 调用测试函数,改变测试函数的参数,减少代码的烧录次数,缩短项目的开发时间。

FinSH 支持两种输入模式,分别是传统命令行模式(msh,较常用)和 C 语言解释器模式,但是两者不能同时使用。

二、FinSH 内置命令

2.1、tap键

按下 Tab 键后打印出来的当前支持的所有显示 RT-Thread 内核状态信息的命令。

2.2、显示线程状态

使用 ps 或者 list_thread 命令来列出系统中的所有线程信息,包括线程优先级、状态、栈的最大使用量等。

2.3、显示信号量状态

使用 list_sem 命令来显示系统中所有信号量信息,包括信号量的名称、信号量的值和等待这个信号量的线程数目。

2.4、显示事件状态

使用 list_event 命令来显示系统中所有的事件信息,包括事件名称、事件的值和等待这个事件的线程数目。

2.5、显示互斥量状态

使用 list_mutex 命令来显示系统中所有的互斥量信息,包括互斥量名称、互斥量的所有者和所有者在互斥量上持有的嵌套次数等。

2.6、显示邮箱状态

使用 list_mailbox 命令显示系统中所有的邮箱信息,包括邮箱名称、邮箱中邮件的数目和邮箱能容纳邮件的最大数目等。

2.7、显示消息队列状态

使用 list_msgqueue 命令来显示系统中所有的消息队列信息,包括消息队列的名称、包含的消息数目和等待这个消息队列的线程数目。

2.8、显示内存池状态

使用 list_mempool 命令来显示系统中所有的内存池信息,包括内存池的名称、内存池的大小和最大使用的内存大小等。

2.9、显示定时器状态

使用 list_timer 命令来显示系统中所有的定时器信息,包括定时器的名称、是否是周期性定时器和定时器超时的节拍数等。

2.10、显示设备状态

使用 list_device 命令来显示系统中所有的设备信息,包括设备名称、设备类型和设备被打开次数。

2.11、显示动态内存状态

使用 free 命令来显示系统中所有的内存信息。

三、自定义 FinSH 命令

除了 FinSH 自带的命令,FinSH 还也提供了多个宏接口来导出自定义命令,导出的命令可以直接在FinSH 中执行。

3.1、自定义 msh 命令

自定义的 msh 命令,可以在 msh 模式下被运行,将一个命令导出到 msh 模式可以使用如下宏接口:

MSH_CMD_EXPORT(name, desc);//命令及其描述

.这个命令可以导出有参数的命令,也可以导出无参数的命令。导出无参数命令时,函数的入参为 void,示例如下:

void hello(void)
{
    rt_kprintf("hello RT-Thread!\n");
}
MSH_CMD_EXPORT(hello , say hello to RT-Thread);

导出有参数的命令时,函数的入参为 int argc 和 char**argv 。argc 表示参数的个数,argv 表示命令行参数字符串指针数组指针。导出有参数命令示例如下:

static void atcmd(int argc, char**argv)
{
……
}
MSH_CMD_EXPORT(atcmd, atcmd sample: atcmd <server|client>);

3.2、自定义 C-Style 命令和变量

将自定义命令导出到 C-Style 模式可以使用如下接口:

FINSH_FUNCTION_EXPORT(name, desc);

与msh类似,不赘述。

3.3、自定义命令重命名

FinSH 的函数名字长度有一定限制,它由 finsh.h 中的宏定义 FINSH_NAME_MAX 控制,默认是16 字节,这意味着 FinSH 命令长度不会超过 16 字节。这里有个潜在的问题:当一个函数名长度超过FINSH_NAME_MAX 时,使用 FINSH_FUNCTION_EXPORT 导出这个函数到命令表中后,在 FinSH符号表中看到完整的函数名,但是完整输入执行会出现 null node 错误。这是因为虽然显示了完整的函数名,但是实际上 FinSH 中却保存了前 16 字节作为命令,过多的输入会导致无法正确找到命令,这时就可以使用 FINSH_FUNCTION_EXPORT_ALIAS 来对导出的命令进行重命名。

FINSH_FUNCTION_EXPORT_ALIAS(name, alias, desc);

RT-thread ---- FinSH 控制台

在重命名的命令名字前加 __cmd_ 就可以将命令导出到 msh 模式,否则,命令会被导出到 C-Style 模式。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143194.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2020年公认最快的dns(国内好用的dns)

    简介:2020国内速度最快的dns推荐原版周公解梦分析梦见儿子死了的吉凶境遇安全,推荐长辈惠泽,推荐承受父祖之余德,前辈之提拔,而得大成功及发展,原命若喜水木者更佳。若凶数者:成又转败,陷于离乱变动,至晚年终归孤独失败,又早年有落水灾遇,生涯九死一生之命格。国内又须戒色变及刀杀之危。梦到蛇和蛇一头,速度暗示你可能会受到别人的欺骗,或受到别人欺骗。最快梦见蛇的心理学解梦从做梦内容的本义来说:推荐动物…

    2022年4月13日
    201
  • java 程序中的指令重排是什么_指令和程序的区别和联系

    java 程序中的指令重排是什么_指令和程序的区别和联系Java中有两个编译期:1、编译期:调用javac命令将Java代码编译成Java字节码;2、运行期:JIT编译器将字节码编译成机器码。指令重排指令重排是指在程序执行过程中,为了性能考虑,编译器和CPU可能会对指令重新排序。…

    2022年10月17日
    3
  • NLP学习路线总结

    NLP学习路线总结目录1、自然语言处理概述2、自然语言处理入门基础3、自然语言处理的主要技术范畴4、自然语言处理基本点5、特征处理6、模型选择7、NLP常用工具8、NLP语言模型9、快速入门NLP方法10、自然语言处理学习资料1、自然语言处理概述自然语言处理(NaturalLanguageProcessing,NLP)是计算机科学领域与人工智能领域中的一个重要方向…

    2022年9月28日
    3
  • SNMP安全访问

    SNMP安全访问

    2021年7月29日
    51
  • VS2005SP1安装加速「建议收藏」

    VS2005SP1安装加速「建议收藏」vs2005sp1出来已经有一段时间了,由于安装速度太慢,我一直都没有安装,今天遇到一个vs的bug,不得已需要安装sp1,上网找了一下,发现一个解决安装速度慢的方案。之所以速度慢是很大程度上是因为windowsinstaller的cache造成,在安装时暂时禁用掉windowsinstaller的cache可以极大的加速sp1的安装,而且可以节省1.3G的磁盘空间。将下面的代码存为b

    2022年9月1日
    2
  • 圆周率的前十万亿位_圆周率算到60万亿位

    圆周率的前十万亿位_圆周率算到60万亿位3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644…

    2022年9月13日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号