——早期文档称其为 finsh,别和 finish搞混了——
FinSH 控制台
FinSH 是 RT-Thread 的命令行组件(shell),提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。
shell指一种接受用户输入的命令,解释之后,传递给操作系统,并将操作系统执行的结果返回给用户的程序。由于这个程序像一层外壳包裹在操作系统的外面,所以它被称为 shell。
windows上的CMD可以认为就是一种shell。
用户在控制终端输入命令,控制终端通过串口、USB、网络等方式将命令传给设备里的 FinSH,FinSH会读取设备输入命令,解析并自动扫描内部函数表,寻找对应函数名,执行函数后输出回应,回应通过原路返回,将结果显示在控制终端上。
finsh支持两种输入模式:
- C语言解释器模式(c-style):
finsh能够解析执行大部分C语言的表达式,并使用类似C语言的函数调用方式访问系统中的函数及全局变量,此外它也能够通过命令行方式创建变量。 - 传统命令行模式msh(module shell):
finsh运行方式类似于dos/bash等传统shell。
此模式被官方推荐
在C-Style 模式下FinSH 占用体积比较大,运行脚本或者程序时不太方便,而msh 模式体积小,使用方便,能够解决C-Style 模式下的弊端。
如果在 RT-Thread 中同时使能了这两种模式,那它们可以动态切换。
FinSH 内置命令
在 RT-Thread 中默认内置了一些 FinSH 命令,在 FinSH 中输入 help 后回车或者直接按下 Tab 键,就可以打印当前系统支持的所有命令。C-Style 和 msh 模式下的内置命令基本一致。
finSH支持TAB键自动补全,若已经输入部分字符时按下TAB键,将会查找匹配的命令,并自动补全,并可以继续输入,多次补全。
上下键可以回溯最近输入的历史命令,左右键可移动光标,退格键删除。
默认命令的数量不是固定的,RT-Thread的各个组件会向 FinSH 输出一些命令。
以 msh 为例:
RT-Thread shell commands:
version - show RT-Thread version information
list_thread - list thread
list_sem - list semaphore in system
list_event - list event in system
list_mutex - list mutex in system
list_mailbox - list mail box in system
list_msgqueue - list message queue in system
list_timer - list timer in system
list_device - list device in system
exit - return to RT-Thread shell mode.
help - RT-Thread shell help.
ps - List threads in the system.
time - Execute command with time.
free - Show the memory usage in the system.
自定义 FinSH 命令
待补充
FinSH 功能配置
FinSH 功能可以裁剪,宏配置选项在 rtconfig.h 文件中定义。
FinSH 移植
FinSH 源码位于 components/finsh 目录下。
FinSH 线程:
FinSH 的输出:
FinSH 的 输 出 依 赖 于 系 统 的 输 出, 在 RT-Thread 中 依 赖 rt_kprintf() 输 出。
FinSH 的输入
FinSH文件架构浅析
finsh_token:token lex for finsh shell.
finsh_ops:operations for finsh shell.
finsh_node:node routines for finsh shell.
finsh_heap_heap management in finsh shell.
finsh_var:Variable implementation in finsh shell.
error number for finsh shell.
——待补充——