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

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

3天内不再提示

nr_micro_shell介绍及使用方法

MCU开发加油站 来源:MCU开发加油站 作者:MCU开发加油站 2022-06-13 16:58 次阅读

1

nr_micro_shell介绍

在进行调试和维护时,常常需要与单片机进行交互,获取、设置某些参数或执行某些操作,nr_micro_shell正是为满足这一需求,针对资源较少的MCU编写的基本命令行工具。虽然RT_Thread组件中已经提供了强大的finsh命令行交互工具,但对于ROMRAM资源较少的单片机,finsh还是略显的庞大,在这些平台上,若仍想保留基本的命令行交互功能,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演示效果如下

7d346714-eaf4-11ec-ba43-dac502259ad0.gif7d846872-eaf4-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工具使用nr_micro_shell

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

裸机下使用nr_micro_shell package

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键等控制键(控制符)。


原文标题:一个开源MCU级命令行交互组件

文章出处:【微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

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

    关注

    145

    文章

    15985

    浏览量

    343285
  • Linux
    +关注

    关注

    87

    文章

    10974

    浏览量

    206669
  • Shell
    +关注

    关注

    1

    文章

    357

    浏览量

    22896
  • RT-Thread
    +关注

    关注

    31

    文章

    1147

    浏览量

    38853

原文标题:一个开源MCU级命令行交互组件

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux Shell学习:uniq命令使用方法介绍

    Linux Shell学习:uniq命令使用方法介绍uniq命令的作用:显示唯一的行,对于那些连续重复的行只显示一次! 接下来通过实践实例说明: [root@stu100 ~]# cat test
    发表于 06-06 12:24

    英飞凌MEMTOOL软件介绍使用方法

    ,附件中详细介绍了这款软件支持的操作系统平台、支持烧录的英飞凌MCU系列和具体型号,并详细介绍了软件的使用方法。MEMTOOL软件介绍使用方法
    发表于 12-14 09:39

    Micro:bit的使用方法

    Micro:bit全称为BBC Micro:bit,是一款英国广播公司(BBC)推出的,用于青少年编程教育的ARM开发版,接下来,让我们一起认识Micro:bit,学习Micro:bi
    发表于 11-04 06:46

    介绍示波器的特殊使用方法

    本文介绍了示波器的特殊使用方法
    发表于 05-06 10:36

    介绍独立按键基本的使用方法

    独立按键基本的使用方法——状态机(有人也喜欢用三行代码的方法。当然这都无所谓,萝卜白菜各有所爱,只要别用主时序给按键消抖就行!)1、要使用独立按键,那么开发板上的J5跳帽必须接到BTN(独立按键)。...
    发表于 01-06 06:30

    nr_micro_shell的优点是什么

    nr_micro_shell — 在单片机上体验linux shell命令行,自动补全,历史命令,自定义命令单片机在进行实际调试和维护时,常常需要与单片机进行交互,获取或设置某些参数,以了解系统工作
    发表于 01-12 06:58

    介绍SPI的使用方法

    写在最前使用RT-Thread Studio开发环境开发STM32单片机程序,与MDK使用env有一定的差别,对于刚开始使用的程序员来说,主要是找不到配置选项在哪里,上一篇介绍了TIM设备的使用方法
    发表于 02-17 06:32

    DK-START-GW1NR9 V3.1用户手册

    DK-START-GW1NR9 V3.1用户手册分为四个部分: 1. 简述开发板的功能特点和硬件资源; 2. 介绍开发板上的各部分硬件电路的功能、电路及管脚分配; 3. 开发板使用注意事项; 4. 介绍 FPGA 开发软件的
    发表于 10-11 07:55

    【CW32饭盒派开发板试用体验】+ 串口nr_micro_shell移植

    */ } 这样串口的发送和接收都搞定了。下面就利用串口移植一个shell功能测试一下。 本次就选用了nr_micro_shell这一个开源的shell库。这个简单方便,用的也挺多的。其实听说还有个
    发表于 05-07 16:48

    shell编程使用方法

    Shell编程的基本格式:Shell脚本的文件名后缀通常是.sh (当然你也可以使用其他后缀或者没有后缀,.sh是为了规范)。程序编写格式:[java] view plain copy#!/bin/bash
    发表于 12-12 15:28 2896次阅读
    <b class='flag-5'>shell</b>编程<b class='flag-5'>使用方法</b>

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大
    的头像 发表于 12-24 20:37 2448次阅读

    WinCC中定时器使用方法介绍

    WinCC中定时器使用方法介绍说明。
    发表于 04-22 14:50 8次下载

    【国民技术N32项目移植】N32L43XRL-STB串口调试 nr_micro_shell移植

    【国民技术N32项目移植】N32L43XRL-STB串口调试 nr_micro_shell移植
    的头像 发表于 01-05 09:10 1407次阅读
    【国民技术N32项目移植】N32L43XRL-STB串口调试 <b class='flag-5'>nr_micro_shell</b>移植

    分享一个开源轻量级单片机命令行交互组件

    在进行调试和维护时,常常需要与单片机进行交互,获取、设置某些参数或执行某些操作,nr_micro_shell正是为满足这一需求,针对资源较少的MCU编写的基本命令行工具。
    的头像 发表于 01-29 10:43 1004次阅读

    如何在单片机中实现命令交互

    在进行调试和维护时,常常需要与单片机进行交互,获取、设置某些参数或执行某些操作,nr_micro_shell正是为满足这一需求,针对资源较少的MCU编写的基本命令行工具。
    发表于 09-27 09:31 212次阅读
    如何在单片机中实现命令交互