【带你认识 RT-Thread】FinSH 控制台

1.FinSH 简介

       FinSH 是 RT-Thread 的命令行组件,提供一套供用户在命令行调用的操作接口,主要用于调试或查看系统信息。它可以使用串口、以太网、USB 等与 PC 进行通信,用户在控制终端输入命令,控制终端通过串口、USB、网络等方式将命令传给设备里的 FinSH,FinSH 会读取设备输入命令,解析并自动扫描内部函数表,寻找对应函数名,执行函数后输出回应,回应通过原路返回,将结果显示在控制终端上。
       当使用串口连接设备与控制终端时,FinSH 命令的执行流程,如图 1 所示。

2.添加 FinSH 组件

       添加 FinSH 组件概括分为三步:第一步添加 FinSH 源码;第二步开启相关宏定义;第三步配置硬件接口。具体操作过程如下:

       (1)打开工程,点击 Manage Run-Time Environment 添加 FinSH 源码到工程,如图 2 所示,添加后工程中多了 c、msh.c、shell.c 这三个源文件。



       (2)如图 3 所示,在 h 文件中只有定义了 RTE_USING_FINSH 这个宏才会启用 FinSH 功能,默认是不启用的,所以需要在 RTE_Components.h 文件中定义 RTE_USING_FINSH 这个宏。



       (3)FinSH 获取字符和打印字符最终都是通过 rt_hw_console_getchar 和 rt_hw_console_output 这两个函数实现的,所以需要在外部定义这两个函数并与硬件做对接。由于不同厂家 MCU 硬件接口不同,这里以 NXP LPC54101 为例来实现串口输出与读取数据,如图 4 所示。


3.FinSH 系统命令

       配置好串口打印函数后,系统上电会自动打印系统信息,如图 5 所示。如果之后出现 msh > 说明 FinSH 线程启动成功,随时可以输入命令。如图所示,作者在输入 help 命令后系统返回了当前支持的所有命令:

  • version 系统版本信息。
  • list_thread 系统中的所有线程信息,包括线程优先级、状态、栈的最大使用量等。
  • list_sem 系统中所有信号量信息,包括信号量的名称、信号量的值和等待这个信号量的线程数目。
  • list_event 系统中所有的事件信息,包括事件名称、事件的值和等待这个事件的线程数目。
  • list_mutex 系统中所有的互斥量信息,包括互斥量名称、互斥量的所有者和所有者在互斥量上持有的嵌套次数等。
  • list_mailbox 系统中所有的邮箱信息,包括邮箱名称、邮箱中邮件的数目和邮箱能容纳邮件的最大数目等。


  • list_msgqueue 系统中所有的消息队列信息,包括消息队列的名称、包含的消息数目和等待这个消息队列的线程数目。
  • list_timer 系统中所有的定时器信息,包括定时器的名称、是否是周期性定时器和定时器超时的节拍数等。
  • help 帮助。
  • ps 与 list_thread 功能相同。
  • free 系统中所有的内存信息。

       同时 FinSH 支持自动补全功能,当没有输入任何字符时按下 Tab 键将会打印当前系统支持的所有命令。若已经输入部分字符时按下 Tab 键,将会查找匹配的命令,也会按照文件系统的当前目录下的文件名进行补全,并可以继续输入,多次补全。

【参考资料】

       RT-Thread 文档中心(https://www.rt-thread.org/document/site/#)

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论