STM32 移植 RT-Thread 标准版的 FinSH 组件
一、移植准备
开发版STM32F10xC8T6
准备好移植RT-Thread的移植工程
没动手移植过RT-Thread的小伙伴,可以看RT-Thread移植到stm32我这里是将控制台信息打印到串口的,所以需要确认RT-Thread可以将控制台信息通过串口输出。有疑问的话可以看我之前的文章,RTThread 重定义rt_hw_console_output函数。
控制台能正常打印信息后,如下图所示:

二、移植FinSH源码
在项目中添加finsh源码
FinSH 源码位于 components/finsh 目录下,如下图所示:
将finsh文件拷贝至工程项目的RT_Thread\components路劲下,如下图所示:


在工程中添加finsh源码,如下图所示:


在rtconfig.h文件中定义finsh相关的宏
/**
* FinSH
*/ /* 定义该宏可开启系统 FinSH 调试工具的使用,未定义则关闭 */
#define RT_USING_FINSH /* 开启系统 FinSH 时:将该线程名称定义为 tshell */
#define FINSH_THREAD_NAME "tshell" /* 开启系统 FinSH 时:使用历史命令 */
#define FINSH_USING_HISTORY /* 开启系统 FinSH 时:对历史命令行数的定义 */
#define FINSH_HISTORY_LINES 5 /* 开启系统 FinSH 时:定义该宏开启使用 Tab 键,未定义则关闭 */
#define FINSH_USING_SYMTAB /* 开启描述功能 */
#define FINSH_USING_DESCRIPTION /* 开启系统 FinSH 时:定义该线程的优先级 */
#define FINSH_THREAD_PRIORITY 20 /* 开启系统 FinSH 时:定义该线程的栈大小 */
#define FINSH_THREAD_STACK_SIZE 4096 /* 开启系统 FinSH 时:定义命令字符长度 */
#define FINSH_CMD_SIZE 80 /* 开启系统 FinSH 时:定义该宏开启 MSH 功能 */
#define FINSH_USING_MSH /* 开启系统 FinSH 时:开启 MSH 功能时,定义该宏默认使用 MSH 功能 */
#define FINSH_USING_MSH_DEFAULT /* 开启系统 FinSH 时:定义该宏,仅使用 MSH 功能 */
#define FINSH_USING_MSH_ONLY完成后编译会提示rt_hw_console_getchar函数为定义,如下图所示:

三、定义rt_hw_console_getchar函数
只需要在任意C文件中实现rt_hw_console_getchar函数即可,为了提高代码的可读性,建议将函数放在声明串口(usart.c)的文件中,内容如所示:
/**
* Redefine "rt\u hw\u console\u getchar" function to realize finsh function
*/
char rt_hw_console_getchar(void)
{
int ch = -1;
if (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) != RESET)
{
ch = (char)USART_ReceiveData(DEBUG_USARTx);
}
else
{
if (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_ORE) != RESET)
{
USART_ClearFlag(DEBUG_USARTx, USART_FLAG_TC);
}
rt_thread_mdelay(10); // 防止finsh线程优先级太高,需要适当挂起一下
}
return ch;
}
完成后如下图所示:

四、FinSH功能测试
完成以上流程后,编译程序并下载至开发板中,进行测试。这里我使用的控制台软件是MobaXterm,添加串口如下图所示:


下载程序后,控制台便会打印相应的信息,如下图所示:

如上图所示,按回车后,会有相应的反应变说明添加FinSH组件已经成功了。
注意:在使用串口的时候注意串口的接线。
五、FinSH使用
在 RT-Thread 中默认内置了一些 FinSH 命令,在 FinSH 中输入 help 后回车或者直接按下 Tab 键,就可以打印当前系统支持的所有命令。如下图所示:

RT-Thread的FinSH组件具有自动补全功能,只需要输入相应的内容后,按下 Tab 键便会自动补全指令或进行提示。

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

4.工作指令可以去官网查看,FinSH 控制台。
六、自动定义msh命令
示例代码如下所示,代码中创建了 hello 函数,然后通过 MSH_CMD_EXPORT 命令即可将 hello 函数导出到 FinSH 命令列表中。
#include <rtthread.h>
void hello_msh(void)
{
rt_kprintf("hello RT-Thread!\n");
}
MSH_CMD_EXPORT(hello_msh , say hello to RT-Thread);
完成后,在 FinSH 控制台按 tab 键可以看到导出的命令,如下图所示:

运行 hello_msh 命令,运行结果如下图所示:

参考文献
stm32 移植 rt-thread:https://blog.csdn.net/qq_36958104/article/details/111604665
STM32 移植 RT-Thread 标准版的 FinSH 组件的更多相关文章
- Hello China操作系统STM32移植指南(一)
Hello China操作系统移植指南 首先说明一下,为了适应更多的文化背景,对Hello China操作系统的名字做了修改,修改为"Hello X",或者连接在一起,写为&quo ...
- sql server2008企业版和标准版
SQL Server 的企业版和标准版的License价格差5倍之多,在企业应用中,DBA 经常会被这个问题问住,本帖将日常工作实践中遇到到版本问题给出第一手资料,陆续补充…… SQL 2008 镜像 ...
- Windows Server 2003 SP2 R2 企业版/标准版/32与64位 CD-KEY
微软发布Windows Server 2003 R2版的目的是希望透过它填补Windows Server 2003 SP1和Longhorn Server之间的产品发布时间间隔.所以Windows S ...
- 【转】hurry_liu 大神STM32移植contiki入门之一:系统介绍和开发环境搭建
前言: 由于项目的原因,需要在LPC1788(STM32 cortex-M3)上面跑contiki. 之前没有涉及到contiki,不知其为何物.不过这个不是难事,做IT的,每每遇到新事物,都不会处理 ...
- SQL Server 2016 SP1 标准版等同企业版?!
上周微软发布了SQL Server的历史性公告:SQL Server 标准版的SP1提供你和企业版一样得功能.你不信的话?可以点击这里. 这改变了整个关系数据库市场,重重打击了Oracle.在今天的文 ...
- 五一干货来袭!开源Moon.Orm标准版发布!
标准版源代码下载: 链接:http://pan.baidu.com/s/1i3xj0f7 因五一早过(现在中旬了),解压码获取请到: http://www.cnblogs.com/humble/p/3 ...
- SQL Server 2008 标准版不支持Reporting Services的数据驱动订阅
今天开发同事找我,说为什么Reporting Services服务器的报表管理的订阅选项里面只有"新建订阅"选项, 没有"数据驱动订阅"选项,说实话,我也基本上 ...
- SQL Server 2008 R2 企业版/开发版/标准版(中英文下载,带序列号)
一. 简体中文 1. SQL Server 2008 R2 Developer (x86, x64, ia64) – DVD (Chinese-Simplified) File Name: cn_sq ...
- 美萍超市销售管理系统标准版access数据库密码mp611
美萍超市销售管理系统标准版access数据库密码mp611 作者:admin 来源:本站 发表时间:2015-10-14 19:01:43 点击:199 美萍超市销售管理系统标准版access后 ...
随机推荐
- 《手把手教你》系列基础篇(九十一)-java+ selenium自动化测试-框架设计基础-Logback实现日志输出-下篇(详解教程)
1.简介 为了方便查看和归档:(1)不同包的日志可能要放到不同的文件中,如service层和dao层的日志:(2)不同日志级别:调试.信息.警告和错误等也要分文件输出.所以宏哥今天主要介绍和分享的是: ...
- 论文解读(IGSD)《Iterative Graph Self-Distillation》
论文信息 论文标题:Iterative Graph Self-Distillation论文作者:Hanlin Zhang, Shuai Lin, Weiyang Liu, Pan Zhou, Jian ...
- Linux-3作业练习
1.自建yum仓库,分别为网络源和本地源 请移步: yum源配置 2.编译安装http2.4,实现可以正常访问,并将编译步骤和结果提交. 请移步:http2.4编译安装 总结参照https ...
- 【多线程】线程强制执行 join()
线程强制执行 join() Join合并线程,待此线程执行完成后,再执行其他线程,其他线程阻塞 : 可以想象成插队. 代码示例: /** * @Description 测试join方法 * @Auth ...
- Spring Boot 2.7.0发布,2.5停止维护,节奏太快了吧
这几天是Spring版本日,很多Spring工件都发布了新版本, Spring Framework 6.0.0 发布了第 4 个里程碑版本,此版本包含所有针对 5.3.20 的修复补丁,以及特定于 6 ...
- 吊炸天,Spring Security还有这种用法!
在用Spring Security项目开发中,有时候需要放通某一个接口时,我们需要在配置中把接口地址配置上,这样做有时候显得麻烦,而且不够优雅.我们能不能通过一个注解的方式,在需要放通的接口上加上该注 ...
- 【freertos】008-内存管理
前言 本章主要讲解内部存储空间(RAM)的管理. 详细分析heap5方案. 参考: 李柱明博客 https://freertos.blog.csdn.net/article/details/51606 ...
- 技术管理进阶——空降Leader如何开展工作?
原创不易,求分享.求一键三连 前几天有个粉丝咨询了一个的问题: 最近遇到一个空降Leader,挺苦恼的: 新Leader技术很厉害,但平时根本就不管我们,也不愿意了解业务,更像是一个技术顾问. 具体案 ...
- 一文学完Linux常用命令
一.Linux 终端命令格式 1.终端命令格式 完整版参考链接:Linux常用命令完整版 command [-options] [parameter] 说明: command : 命令名,相应功能的英 ...
- Redis 全局通用命令整理
转载请注明出处: 1.查看所有键 keys * 该命令会存在线程阻塞问题,keys 命令也可以通过正则匹配获取存在的缓存数据 2.查看键总数 dbsize dbsize命令会返回当前数据库中键的总数. ...