那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一個(gè)開源MCU級(jí)的命令行交互組件

jf_pJlTbmA9 ? 來源:維護(hù):Nrusher ? 作者:維護(hù):Nrusher ? 2023-10-17 16:26 ? 次閱讀

1、nr_micro_shell介紹

在進(jìn)行調(diào)試和維護(hù)時(shí),常常需要與單片機(jī)進(jìn)行交互,獲取、設(shè)置某些參數(shù)或執(zhí)行某些操作,nr_micro_shell正是為滿足這一需求,針對(duì)資源較少的MCU編寫的基本命令行工具。雖然RT_Thread組件中已經(jīng)提供了強(qiáng)大的finsh命令行交互工具,但對(duì)于ROMRAM資源較少的單片機(jī),finsh還是略顯的龐大,在這些平臺(tái)上,若仍想保留基本的命令行交互功能,nr_micro_shell是一個(gè)不錯(cuò)的選擇。

nr_micro_shell具有以下優(yōu)點(diǎn)

1.占用資源少,使用簡(jiǎn)單,靈活方便。使用過程只涉及兩個(gè)shell_init()和shell()兩個(gè)函數(shù),無論是使用RTOS還是裸機(jī)都可以方便的應(yīng)用該工具,不需要額外的編碼工作。

2.交互體驗(yàn)好。完全類似于linux shell命令行,當(dāng)串口終端支持ANSI(如Hypertrm終端)時(shí),其不僅支持基本的命令行交互,還提供Tab鍵命令補(bǔ)全,查詢歷史命令,方向鍵移動(dòng)光標(biāo)修改功能。

3.擴(kuò)展性好。nr_micro_shell為用戶提供自定義命令的標(biāo)準(zhǔn)函數(shù)原型,只需要按照命令編寫命令函數(shù),并注冊(cè)命令函數(shù),即可使用命令。

nr_micro_shell和相同配置下的finsh (finsh不使用msh)占用資源對(duì)比

wKgZomUD6LyACC8CAAA_iWGFbWE152.png

兩者配置都為

最多3條歷史命令。

支持Tab補(bǔ)全 。

命令行最大長度為100。

最多10個(gè)命令參數(shù)。

命令行線程堆棧為512字節(jié)。

nr_micro_shell演示效果如下

wKgaomUD6L6AH7MJAAj12eu6YWo543.gif
wKgaomUD6MCAf9uYAAYQ5gkcWX4476.gif

1.1 目錄結(jié)構(gòu)

wKgZomUD6MGALN-oAABnkJblsnk087.png

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-Thread online packages
    tools packages ---> 
        [*] nr_micro_shell:Lightweight command line interaction tool. --->

相關(guān)的設(shè)置在按下sapce鍵選中后,按enter可進(jìn)行相關(guān)參數(shù)配置。然后讓 RT-Thread 的包管理器自動(dòng)更新,或者使用 pkgs --update 命令更新包到 BSP 中。

若您需要運(yùn)行示例,請(qǐng)保證RT_Thread配置中的Using console for kt_printf.選項(xiàng)是被打開的,kt_printf可以正常工作,且Use components automatically initialization.選項(xiàng)打開。編譯直接下載仿真便可以使用nr_micro_shell。命令行空白時(shí)按Tab,可顯示所有支持的命令,測(cè)試示例命令可見doc/pic下的使用示例動(dòng)圖。自定義命令過程,參照下文3. 裸機(jī)下使用nr_micro_shell package中的方法。

3、裸機(jī)下使用nr_micro_shell package

3.1 配置:

所有配置工作都可以在 nr_micro_shell_config.h 中完成。有關(guān)詳細(xì)信息,請(qǐng)參見文件中的注釋。

3.2 用法:

確保所有文件都已添加到項(xiàng)目中。

確保nr_micro_shell_config.h中的宏函數(shù)"shell_printf(),ansi_show_char()"可以在項(xiàng)目中正常使用。

使用示例如下

#include "nr_micro_shell.h"

int main(void)
{
    /* 初始化 */
    shell_init();

    while(1)
    {
        if(USART GET A CHAR 'c')
        {
            /* nr_micro_shell接收字符 */
            shell(c);
        }
    }
}

建議直接使用硬件輸入前,建議使用如下代碼(確保可以正常打印信息),驗(yàn)證nr_micro_shell是否可以正常運(yùn)行

#include "nr_micro_shell.h"

int main(void)
{
    unsigned int i = 0;
    //匹配好結(jié)束符配置 NR_SHELL_END_OF_LINE 0
    char test_line[] = "test 1 2 3n"
    /* 初始化 */
    shell_init();
    
    /* 初步測(cè)試代碼 */
    for(i = 0; i < sizeof(test_line)-1; i++)
    {
        shell(test_line[i]);
    }

    /* 正式工作代碼 */
    while(1)
    {
        if(USART GET A CHAR 'c')
        {
            /* nr_micro_shell接收字符 */
            shell(c);
        }
    }
}

3.3 添加自己的命令

STEP1:

您需要在nr_micro_shell_commands.c*中實(shí)現(xiàn)一個(gè)命令函數(shù)。命令函數(shù)的原型如下

void your_command_funtion(char argc, char *argv)
{
    .....
}

argc是參數(shù)的數(shù)目。argv存儲(chǔ)每個(gè)參數(shù)的起始地址和內(nèi)容。如果輸入字符串是

test -a 1

則argc為3,argv的內(nèi)容為

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

如果想知道第一個(gè)或第二個(gè)參數(shù)的內(nèi)容,應(yīng)該使用

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

STEP2: 在使用命令前需要注冊(cè)命令,共有兩種方法注冊(cè)命令

1.當(dāng)配置文件中NR_SHELL_USING_EXPORT_CMD未被定義,在 static_cmd[] 表中寫入

const static_cmd_st static_cmd[] =
{
   .....
   {"your_command_name",your_command_funtion},
   .....
   {"",NULL}
};

注意:不要?jiǎng)h除{"",NULL}!

2.當(dāng)配置文件中NR_SHELL_USING_EXPORT_CMD被定義,且NR_SHELL_CMD_EXPORT()支持使用的編譯器時(shí),可以使用以下方式注冊(cè)命令

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命令編譯源碼,生產(chǎn)的可執(zhí)行文件為./examples/simulator/out/nr_micro_shell或./examples/simulator/out/nr_micro_shell_db。可使用的make命令如下

# 編譯可執(zhí)行文件
make
# 編譯可仿真執(zhí)行文件
make debug
# 清除編譯生成文件
make clean

5、注意事項(xiàng)

根據(jù)你的使用習(xí)慣使用NR_SHELL_USING_EXPORT_CMD選擇命令注冊(cè)方式。

使用注冊(cè)表注冊(cè)命令時(shí),確保您的工程中存在注冊(cè)表

const static_cmd_st static_cmd[] =
{
   .....
   {"",NULL}
};

使用NR_SHELL_CMD_EXPORT()時(shí)確保,NR_SHELL_CMD_EXPORT()支持使用的編譯器,否則會(huì)報(bào)錯(cuò)。

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

直接來源:最后一個(gè)bug
原文來源:維護(hù):Nrusher
免責(zé)聲明:本文為轉(zhuǎn)載文章,轉(zhuǎn)載此文目的在于傳遞更多信息,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)聯(lián)系小編進(jìn)行處理

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17317

    瀏覽量

    352640
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3402

    瀏覽量

    42711
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    curl wget bond:深入解析命令行工具的差異與應(yīng)用場(chǎng)景

    curl curl 是個(gè)用于與服務(wù)器進(jìn)行數(shù)據(jù)傳輸?shù)?b class='flag-5'>命令行工具。它支持多種協(xié)議,包括 HTTP、HTTPS、 FTP 等。 基本用法 獲取網(wǎng)頁內(nèi)容: curl http://example.com
    的頭像 發(fā)表于 01-24 09:20 ?73次閱讀

    圖形用戶界面與命令行接口的比較

    界面(GUI) : GUI是種用戶界面,允許用戶通過圖形圖標(biāo)和視覺指示器與電子設(shè)備進(jìn)行交互。 它通常包括窗口、按鈕、圖標(biāo)和菜單等元素,用戶可以通過鼠標(biāo)或觸摸屏進(jìn)行操作。 命令行接口(CLI) : CLI是
    的頭像 發(fā)表于 11-12 14:38 ?546次閱讀

    Mobaxterm 的命令行使用方法

    的遠(yuǎn)程桌面協(xié)議(如RDP和VNC),以及文件傳輸協(xié)議(如FTP和SFTP)。本文將詳細(xì)介紹如何使用Mobaxterm的命令行功能。 2. 安裝 Mobaxterm 在開始之前,確保你已經(jīng)安裝
    的頭像 發(fā)表于 11-11 09:08 ?2055次閱讀

    APM32F411板的python+pyocd命令行操作

    前段時(shí)間學(xué)習(xí)了下如何使用pyocd配合APM32F411VCTINY板在命令行下給它進(jìn)行各種騷操作,在使用段時(shí)間后就想著:pyocd是基于python的,那是不是也可以使用python腳本+pyocd使用起來呢?
    的頭像 發(fā)表于 10-18 16:21 ?438次閱讀
    APM32F411板的python+pyocd<b class='flag-5'>命令行</b>操作

    常用CentOS命令總結(jié)

    CentOS(Community ENTerprise Operating System)是基于Red Hat Enterprise Linux(RHEL)的自由和開源的企業(yè)級(jí)操作系統(tǒng),旨在提供
    的頭像 發(fā)表于 08-07 15:35 ?395次閱讀

    使用idf4.3在命令行打開menuconfig,如何才能開啟lwip配置界面?

    請(qǐng)問使用idf4.3在命令行打開menuconfig,如何才能開啟lwip配置界面。
    發(fā)表于 06-21 06:08

    請(qǐng)問CY8CKIT-005-A是否支持命令行編程?

    我使用 minipro4 SWD 和 MTB-programmer 5.0 對(duì) MCU 編程,在批量生產(chǎn)中,我們希望使用腳本編程,它是否支持命令行編程?
    發(fā)表于 06-03 06:19

    鴻蒙ArkUI-X跨平臺(tái)開發(fā):【命令行工具(ACE Tools)】

    ACE Tools是套為ArkUI-X項(xiàng)目跨平臺(tái)應(yīng)用開發(fā)者提供的命令行工具,支持在Windows/Ubuntu/macOS平臺(tái)運(yùn)行,用于構(gòu)建OpenHarmony/HarmonyOS、Android和iOS平臺(tái)的應(yīng)用程序,其功能包括開發(fā)環(huán)境檢查,新建項(xiàng)目,編譯打包,安裝
    的頭像 發(fā)表于 05-21 17:39 ?1981次閱讀
    鴻蒙ArkUI-X跨平臺(tái)開發(fā):【<b class='flag-5'>命令行</b>工具(ACE Tools)】

    高效云端管理的秘訣——華為云命令行工具 KooCLI

    發(fā)現(xiàn)了云上命令行工具,我的云端管理效率從此得到了質(zhì)的飛躍。 我從華為云官方產(chǎn)品幫助文檔中了解了 KooCLI 工具,文檔中介紹的便捷操作和高效管理讓我心動(dòng)不已,于是,我開啟了我的體驗(yàn)。通過簡(jiǎn)單的命令行輸入,我能夠快速完成
    的頭像 發(fā)表于 05-10 00:25 ?735次閱讀
    高效云端管理的秘訣——華為云<b class='flag-5'>命令行</b>工具 KooCLI

    鴻蒙OpenHarmony南向:【Hi3516標(biāo)準(zhǔn)系統(tǒng)入門(命令行方式)】

    除小型系統(tǒng)外,Hi3516DV300開發(fā)板還支持標(biāo)準(zhǔn)系統(tǒng)。此章節(jié)簡(jiǎn)要介紹如何使用命令行在Hi3516DV300開發(fā)板上進(jìn)行標(biāo)準(zhǔn)系統(tǒng)的開發(fā)。
    的頭像 發(fā)表于 05-08 09:26 ?941次閱讀
    鴻蒙OpenHarmony南向:【Hi3516標(biāo)準(zhǔn)系統(tǒng)入門(<b class='flag-5'>命令行</b>方式)】

    STM8 flash loader命令行調(diào)用錯(cuò)誤的原因?

    [td]我目前在用flash loader的命令行,編寫自己的上位機(jī)軟件來升級(jí)程序,但是在用命令行調(diào)用的時(shí)候直出錯(cuò),有人能幫忙分析下嗎? 我編寫的bat文件
    發(fā)表于 05-06 07:23

    HarmonyOS開發(fā):【基于命令行(安裝庫和工具集)】

    使用命令行進(jìn)行設(shè)備開發(fā)時(shí),可以通過以下步驟安裝編譯OpenHarmony需要的庫和工具。
    的頭像 發(fā)表于 04-25 21:03 ?482次閱讀
    HarmonyOS開發(fā):【基于<b class='flag-5'>命令行</b>(安裝庫和工具集)】

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

    要在CentOS上切換命令行和桌面環(huán)境,您可以通過以下步驟進(jìn)行: 1、安裝桌面環(huán)境:如果您的CentOS VPS上還沒有安裝圖形桌面環(huán)境,您需要安裝個(gè)般來說,常用的桌面環(huán)境有GN
    的頭像 發(fā)表于 04-10 17:41 ?712次閱讀

    STM32G070RB使用jlink命令行下載無法識(shí)別芯片怎么解決?

    STM32G070RB 使用jlink命令行下載無法識(shí)別芯片,想手動(dòng)添加芯片,請(qǐng)問哪里可以下載驅(qū)動(dòng).elf文件 或者有什么方法能夠?qū)崿F(xiàn)jlink命令行下載
    發(fā)表于 04-02 06:15

    人機(jī)交互的三個(gè)階段 人機(jī)交互的常用方式

    機(jī)交互經(jīng)歷的三個(gè)階段:命令行界面交互階段、圖形用戶界面交互階段、自然和諧的人機(jī)交互階段。
    的頭像 發(fā)表于 03-13 17:25 ?3379次閱讀
    大发888认识的见解| 百家乐官网2珠路投注法| 百家乐官网几点不用补| 百家乐出租平台| 百家乐追号工具| 百家乐官网如何计牌| 百家乐是片人的吗| bet365网站| 六合彩百家乐官网有什么平码| 百家乐如何睇路| 云鼎娱乐城优惠活动| 百家乐官网光纤冼牌机| 大发888casino组件下载| 澳门百家乐官网博客| 百家乐是怎么赌法| 永顺县| 百家乐视频游戏界面| 德州扑克锦标赛| 百家乐官网平注法到65688| 香港六合彩报| 百家乐网站东方果博| 松潘县| 百家乐最佳打| 澳门百家乐官网必胜看路| 百家乐合| 百家乐官网透明出千牌靴| 路虎百家乐的玩法技巧和规则| 新世纪百家乐官网现金网| 顶级赌场手机版官方下载| 韩国百家乐官网的玩法技巧和规则 | 申博太阳城娱乐网| 怎么赢百家乐官网的玩法技巧和规则| 娱乐城百利宫娱乐| 百家乐娱乐城怎么样| 赌百家乐官网的高手| 老k百家乐官网的玩法技巧和规则| 视频棋牌游戏大厅| 百家乐技巧之微笑心法| 百家乐官网电子路单破解| 大发888 大发888| 百家乐账号变动原因|