0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

开源轻量级单片机命令行交互项目

小麦大叔 来源:gitee 作者:gitee 2022-05-23 09:52 次阅读

1、介绍

在进行调试和维护时,常常需要与单片机进行交互,获取、设置某些参数或执行某些操作,nr_micro_shell正是为满足这一需求,针对资源较少的MCU编写的基本命令行工具。

虽然RT_Thread组件中已经提供了强大的finsh命令行交互工具,但对于ROMRAM资源较少的单片机,finsh还是略显的庞大,在这些平台上,若仍想保留基本的命令行交互功能,nr_micro_shell是一个不错的选择。

项目地址:github.com/Nrusher/nr_micro_shell

nr_micro_shell具有以下优点

1.占用资源少,使用简单,灵活方便。使用过程只涉及两个shell_init()和shell()两个函数,无论是使用RTOS还是裸机都可以方便的应用该工具,不需要额外的编码工作。

2.交互体验好。完全类似于linux shell命令行,当串口终端支持ANSI(如Hypertrm终端)时,其不仅支持基本的命令行交互,还提供Tab键命令补全,查询历史命令,方向键移动光标修改功能。

3.扩展性好。nr_micro_shell为用户提供自定义命令的标准函数原型,只需要按照命令编写命令函数,并注册命令函数,即可使用命令。

nr_micro_shell和相同配置下的finsh (finsh不使用msh)占用资源对比

原始工程 添加nr_micro_shell增加量 添加finsh增加量
ROM 63660 +3832 +26908
RAM 4696 +1104 +1304

两者配置都为

  • 最多3条历史命令。
  • 支持Tab补全 。
  • 命令行最大长度为100。
  • 最多10个命令参数。
  • 命令行线程堆栈为512字节。

nr_micro_shell演示效果如下

8cb834b0-da3a-11ec-ba43-dac502259ad0.gif

8d08257e-da3a-11ec-ba43-dac502259ad0.gif

1.1 目录结构

名称 说明
docs 文档目录,包含演示的GIF图片等
examples 例子目录,包括命令函数示例:nr_micro_shell_commands.c 和RT_Thread下使用示例 nr_micro_shell_thread.c
inc 头文件目录
src 源代码目录

1.2 许可证

nr_micro_shell package 遵循 MIT 许可,详见 LICENSE 文件。

1.3 依赖

无依赖

2、RT_Thread 下 ENV 工具使用

RT_Thread 使用 nr_micro_shell package package 需要在 RT-Thread 的包管理器中选择它,具体路径如下:

RT-Threadonlinepackages
toolspackages--->
[*]nr_micro_shell:Lightweightcommandlineinteractiontool.--->

相关的设置在按下sapce键选中后,按enter可进行相关参数配置。然后让 RT-Thread 的包管理器自动更新,或者使用 pkgs --update 命令更新包到 BSP 中。

若您需要运行示例,请保证RT_Thread配置中的Using console for kt_printf.选项是被打开的,kt_printf可以正常工作,且Use components automatically initialization.选项打开。编译直接下载仿真便可以使用nr_micro_shell。命令行空白时按Tab,可显示所有支持的命令,测试示例命令可见doc/pic下的使用示例动图。自定义命令过程,参照下文3. 裸机下使用nr_micro_shell package中的方法。

3、裸机下使用

3.1 配置:

所有配置工作都可以在 nr_micro_shell_config.h 中完成。有关详细信息,请参见文件中的注释。

3.2 用法:

  • 确保所有文件都已添加到项目中。

  • 确保 nr_micro_shell_config.h 中的宏函数"shell_printf(),ansi_show_char()"可以在项目中正常使用。

  • 使用示例如下

#include"nr_micro_shell.h"

intmain(void)
{
/*初始化*/
shell_init();

while(1)
{
if(USARTGETACHAR'c')
{
/*nr_micro_shell接收字符*/
shell(c);
}
}
}

建议直接使用硬件输入前,建议使用如下代码(确保可以正常打印信息),验证nr_micro_shell是否可以正常运行

#include"nr_micro_shell.h"

intmain(void)
{
unsignedinti=0;
//匹配好结束符配置NR_SHELL_END_OF_LINE0
chartest_line[]="test123
"
/*初始化*/
shell_init();

/*初步测试代码*/
for(i=0;i< sizeof(test_line)-1;i++)
{
shell(test_line[i]);
}

/*正式工作代码*/
while(1)
{
if(USARTGETACHAR'c')
{
/*nr_micro_shell接收字符*/
shell(c);
}
}
}

3.3 添加自己的命令

STEP1:

您需要在nr_micro_shell_commands.c*中实现一个命令函数。命令函数的原型如下

voidyour_command_funtion(charargc,char*argv)
{
.....
}

argc是参数的数目。argv存储每个参数的起始地址和内容。如果输入字符串是

test-a1

argc为3,argv的内容为

-------------------------------------------------------------
0x03|0x08|0x0b|'t'|'e'|'s'|'t'|'�'|'-'|'a'|'�'|'1'|'�'|
-------------------------------------------------------------

如果想知道第一个或第二个参数的内容,应该使用

/*"-a"*/
printf(argv[argv[1]])
/*"1"*/
printf(argv[argv[2]])

STEP2:在使用命令前需要注册命令,共有两种方法注册命令

1.当配置文件中NR_SHELL_USING_EXPORT_CMD未被定义,在static_cmd[]表中写入

conststatic_cmd_ststatic_cmd[]=
{
.....
{"your_command_name",your_command_funtion},
.....
{"�",NULL}
};

注意:不要删除{"�",NULL}!

2.当配置文件中NR_SHELL_USING_EXPORT_CMD被定义,且NR_SHELL_CMD_EXPORT()支持使用的编译器时,可以使用以下方式注册命令

NR_SHELL_CMD_EXPORT(your_command_name,your_command_funtion);

4、linux下使用nr_micro_shell仿真

在工程./examples/simulator/目录下存放着nr_micro_shell仿真代码,仍在./examples/nr_micro_shell_commands.c文件中按上述方式添加自定义命令,添加完成后可以使用make命令编译源码,生产的可执行文件为./examples/simulator/out/nr_micro_shell./examples/simulator/out/nr_micro_shell_db。可使用的make命令如下

#编译可执行文件
make
#编译可仿真执行文件
makedebug
#清除编译生成文件
makeclean

5、注意事项

根据你的使用习惯使用NR_SHELL_USING_EXPORT_CMD选择命令注册方式。

使用注册表注册命令时,确保您的工程中存在注册表

conststatic_cmd_ststatic_cmd[]=
{
.....
{"�",NULL}
};

使用NR_SHELL_CMD_EXPORT()时确保,NR_SHELL_CMD_EXPORT()支持使用的编译器,否则会报错。

nr_micro_shell 不支持ESC键等控制键(控制符)。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6039

    文章

    44579

    浏览量

    636462
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17179

    浏览量

    351681
  • 函数
    +关注

    关注

    3

    文章

    4338

    浏览量

    62749

原文标题:轻量级单片机命令行交互项目,全部开源

文章出处:【微信号:knifewheat,微信公众号:小麦大叔】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    图形用户界面与命令行接口的比较

    在计算机科学和信息技术领域,用户与计算机交互的方式主要分为两种:图形用户界面(GUI)和命令行接口(CLI)。这两种界面各有优势和局限性,适用于不同的场景和用户需求。 1. 定义与基本特征 图形用户
    的头像 发表于 11-12 14:38 439次阅读

    Mobaxterm 的命令行使用方法

    的远程桌面协议(如RDP和VNC),以及文件传输协议(如FTP和SFTP)。本文将详细介绍如何使用Mobaxterm的命令行功能。 2. 安装 Mobaxterm 在开始之前,确保你已经安装
    的头像 发表于 11-11 09:08 1632次阅读

    APM32F411板的python+pyocd命令行操作

    前段时间学习了一下如何使用pyocd配合APM32F411VCTINY板在命令行下给它进行各种骚操作,在使用一段时间后就想着:pyocd是基于python的,那是不是也可以使用python脚本+pyocd使用起来呢?
    的头像 发表于 10-18 16:21 347次阅读
    APM32F411板的python+pyocd<b class='flag-5'>命令行</b>操作

    国产芯上运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    是面向单片机的超轻量级的神经网络推理库,即 TinyML 推理库,可以让你在任意单片机上运行轻量级深度学习模型~ 开源地址:https:/
    发表于 08-09 18:26

    国产芯上运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    D9360国产开发板)的TinyMaxi轻量级的神经网络推理库方案测试。 算力测试 TinyMaix 是面向单片机的超轻量级的神经网络推理库,即 TinyML 推理库,可以让你在任意单片机
    发表于 08-07 18:06

    国产芯上运行TinyMaxi轻量级的神经网络推理库-米尔基于芯驰D9国产商显板

    TinyMaix是面向单片机的超轻量级的神经网络推理库,即TinyML推理库,可以让你在任意单片机上运行轻量级深度学习模型~开源地址:htt
    的头像 发表于 07-05 08:02 1902次阅读
    国产芯上运行TinyMaxi<b class='flag-5'>轻量级</b>的神经网络推理库-米尔基于芯驰D9国产商显板

    鸿蒙ArkUI-X跨平台开发:【命令行工具(ACE Tools)】

    ACE Tools是一套为ArkUI-X项目跨平台应用开发者提供的命令行工具,支持在Windows/Ubuntu/macOS平台运行,用于构建OpenHarmony/HarmonyOS、Android和iOS平台的应用程序,其功能包括开发环境检查,新建
    的头像 发表于 05-21 17:39 1857次阅读
    鸿蒙ArkUI-X跨平台开发:【<b class='flag-5'>命令行</b>工具(ACE Tools)】

    鸿蒙OpenHarmony南向:【Hi3516标准系统入门(命令行方式)】

    除小型系统外,Hi3516DV300开发板还支持标准系统。此章节简要介绍如何使用命令行在Hi3516DV300开发板上进行标准系统的开发。
    的头像 发表于 05-08 09:26 906次阅读
    鸿蒙OpenHarmony南向:【Hi3516标准系统入门(<b class='flag-5'>命令行</b>方式)】

    STM8 flash loader命令行调用错误的原因?

    [td]我目前在用flash loader的命令行,编写自己的上位软件来升级程序,但是在用命令行调用的时候一直出错,有人能帮忙分析下吗? 我编写的bat文件
    发表于 05-06 07:23

    HarmonyOS开发:【基于命令行(安装库和工具集)】

    使用命令行进行设备开发时,可以通过以下步骤安装编译OpenHarmony需要的库和工具。
    的头像 发表于 04-25 21:03 439次阅读
    HarmonyOS开发:【基于<b class='flag-5'>命令行</b>(安装库和工具集)】

    香港vps的centos如何切换命令行和桌面?

    要在CentOS上切换命令行和桌面环境,您可以通过以下步骤进行: 1、安装桌面环境:如果您的CentOS VPS上还没有安装图形桌面环境,您需要安装一个。一般来说,常用的桌面环境有GNOME、KDE
    的头像 发表于 04-10 17:41 679次阅读

    STM32G070RB使用jlink命令行下载无法识别芯片怎么解决?

    STM32G070RB 使用jlink命令行下载无法识别芯片,想手动添加芯片,请问哪里可以下载驱动.elf文件 或者有什么方法能够实现jlink命令行下载
    发表于 04-02 06:15

    人机交互的三个阶段 人机交互的常用方式

    交互经历的三个阶段:命令行界面交互阶段、图形用户界面交互阶段、自然和谐的人机交互阶段。
    的头像 发表于 03-13 17:25 3194次阅读

    tasking的命令行控制中如何生成makefiles文件?

    tasking的命令行控制中如何生成makefiles文件?
    发表于 02-06 07:56

    在Linux上如何通过命令行来更改日期和时间?

    在Linux上如何通过命令行来更改日期和时间? 在Linux上,我们可以使用命令行工具来更改日期和时间。操作系统中有一个专门的命令被称为“date”命令,它允许我们更改系统的当前日期和
    的头像 发表于 01-16 17:10 2875次阅读