RT论坛_Thread

RT论坛_Threadfinsh是RT-Thread的命令行外壳(shell),提供一套供用户在命令行的操作接口,主要用于调试或查看系统信息。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

文章主要参考:https://blog.csdn.net/killercode11/article/details/104290949,借鉴了rt_hw_console_getchar()的定义。

本文不介绍 RT-Thread 的串口配置,如有需要,可以参考:重映射串口到 rt_kprintf 函数

将 FinSH源码添加到工程

FinSH源码在 RT-Thread 源码目录的 components\finsh\ 目录下,

在这里插入图片描述

将其导入到工程中,具体操作这里不做介绍,记得要把头文件包含进来,

在这里插入图片描述

开启 FinSH

修改 rtconfig.h,开启 finsh config,下面是使用 Configuration Wizard 向导进行图形化配置,

在这里插入图片描述
其实就是将 finsh_fonfig.h 头文件包含到工程中,这个头文件里有 FisSH 的基本参数配置,

在这里插入图片描述

定义终端读取函数

移植完 FinSH 源码后,初次编译一般会报一个错误,需要将弱化函数 rt_hw_console_getchar() 里的 #error 这行屏蔽掉(记得先把该文件的只读属性关闭)

在这里插入图片描述
接着我们在 board.c 文件手动重新定义 rt_hw_console_getchar() 函数,函数内容如下,这是标准库版本,如果需要 HAL库版本,可以参考文章最前面的链接。

char rt_hw_console_getchar(void)
{ 
   
    /* Note: the initial value of ch must < 0 */
    int ch = -1;
		if(USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) != RESET)
    { 
   
        //USART_ClearITPendingBit(USART_DEBUG, USART_FLAG_RXNE);
        ch = USART_ReceiveData(DEBUG_USARTx) & 0xFF;
    }
    else
    { 
   
        if(USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_ORE) != RESET)
        { 
   
            USART_ClearITPendingBit(DEBUG_USARTx,  USART_FLAG_ORE);
        }
        rt_thread_mdelay(10);
    }

    return ch;
}

Jetbrains全家桶1年46,售后保障稳定

体验 FinSH

我使用 SSCOM 来作为终端,效果还不错,命令直接在显示窗口里输入。

在这里插入图片描述
或许有人会问为什么不用 PuTTy、XShell 这类常用的终端软件,我也想用,但连接上这类终端软件后,开发板就不运行了。

遇到的问题

1.段错误

在这里插入图片描述

导致这种错误的原因有很多种,比如 RT_MAIN_THREAD_STACK_SIZE 太小,而我是因为 RT_THREAD_PRIORITY_MAX 设置得太小(只设置为 8),小于 FINSH_THREAD_PRIORITY 的默认值 21,所以解决办法就是将 FINSH 的线程优先级(数值)改小或者将系统优先级最大值(数值范围)改大。

在这里插入图片描述

2.终端工具无法打印

使用 PuTTy、XShell,终端没反应,且开发板会卡住。初步分析的原因是 “正点原子一键下载电路和终端工具冲突”(网上他人结论),所以只能用串口调试助手来操作 Finsh 了。

3.程序不运行

这个问题可能的原因也很多,但需要注意的是:如果要使用 FinSH,就不能开启串口中断,至于为什么,我目前也没去了解。

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

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

(0)
上一篇 2025年7月26日 上午7:43
下一篇 2025年7月26日 上午8:15


相关推荐

  • iFlytek讯飞智能录音设备SR302星火版用户手册.pdf

    iFlytek讯飞智能录音设备SR302星火版用户手册.pdf

    2026年3月14日
    2
  • MessageDigest简单介绍

    MessageDigest简单介绍本文博客原文參考文章:http://blog.sina.com.cn/s/blog_4f36423201000c1e.html一、概述java.security.MessageDigest类用于为应用

    2022年6月30日
    21
  • Vue2+VueRouter2+webpack 构建项目实战(一)准备工作

    Vue2+VueRouter2+webpack 构建项目实战(一)准备工作Vue2+VueRouter2+webpack构建项目实战(一)准备工作之前写的博客没有采用打包工具,而是直接引用js的方式来做的。这种方式很扯淡,也因此,我写了三篇博客之后就没有再写了。通过几个月的学习和实战,基本厘清了Vue1+VueRouter1+browserify的一些技术点。并且通过几个实际项目的工作,已经验证了自己利用该技术完成项目是没有问题的了。但是,现在主流的打包方式已经

    2022年7月27日
    10
  • 继电器驱动电路(各种单片机、CD4013触发器驱动电路图)

    继电器驱动电路(各种单片机、CD4013触发器驱动电路图)继电器工作原理详解(附3种驱动电路图)2019-09-1216:10继电器继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。继电器的继电特性继电器的输入信号x从零连续增加达到衔铁开始吸合时的动作值xx,继电器的输出信号立刻从y=0跳跃y=ym,即常开触点从断到通。一旦触点闭合,输入量x继续增大,输出信号.

    2022年6月24日
    31
  • JSON之解析

    JSON之解析

    2021年8月24日
    62
  • 用js来实现那些数据结构02(数组篇02-数组方法)

    上一篇文章简单的介绍了一下js的类型,以及数组的增删方法。这一篇文章,我们一起来看看数组还有哪些用法,以及在实际工作中我们可以用这些方法来做些什么。由于其中有部分内容并不常用,所以我尽量缩小篇幅。在这

    2022年3月25日
    48

发表回复

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

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