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后 ...
随机推荐
- python 包之 redis 数据库操作教程
一.安装 redis 是一个 Key-Value 数据库 Value 支持 string(字符串),list(列表),set(集合),zset(有序集合),hash(哈希类型)等类型 pip inst ...
- client 系列
定义 : client翻译过来就是客户端,我们使用client系列的相关属性来获取元素可视区的相关信息.通过client系列的相关属性可以动态的得到该元素的边框大小.元素大小等.
- python学习-Day26
目录 今日内容详细 编程思想 面向过程编程 面向对象编程 类与对象 概念 类与对象的创建 先定义类 后产生对象 语法结构 如何产生对象 对象的实例化 绑定方法 今日内容详细 编程思想 面向过程编程 将 ...
- python学习-Day20
目录 今日内容详细 作业讲解 re模块补充说明 findall的优先级查询 通过索引的方式单独获取分组内匹配到的数据 分组之后还可以给组起别名 split的优先级查询 collections模块 具名 ...
- XCTF练习题---MISC---再见李华
XCTF练习题---MISC---再见李华 flag:Stay hungry, Stay foolish. 解题步骤: 1.观察题目,下载附件 2.拿到手以后发现是一张图片,其中有MD5,破解一下没有 ...
- .NET LoongArch64 正式合并进入.NET
国内自主的龙芯,在做龙芯技术生态就把 .NET 作为其中一部分考虑进去,这也将对接下来国内.NET应用场景充满了期待.通过dotnet/runtime 可以知道现在龙芯版本的 .NET 已经合并到.N ...
- 【ConcurrentHashMap】浅析ConcurrentHashMap的构造方法及put方法(JDK1.7)
目录 引言 代码讲解 构造方法 put方法 ensureSegment Segment.put 引言 ConcurrentHashMap的数据结构如下. 和HashMap的最大区别在于多了一层Segm ...
- swagger在线api文档搭建指南,用于线上合适么?
在上一篇文章中,我们讲解了什么是 api,什么是 sdk: https://www.cnblogs.com/tanshaoshenghao/p/16217608.html 今天将来到我们万丈高楼平地起 ...
- windows获取高精度时间戳 精度100ns
#include <stdio.h> #include <Windows.h> int main(void){ LARGE_INTEGER ticks,Frequency; Q ...
- CentOS下Python管理
一.升级Python 查看系统版本 cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) 查看Python版本 python -V ...