• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > 輕量級單片機命令行交互項目,全部開源

    輕量級單片機命令行交互項目,全部開源

    發布人:xiaomaidashu 時間:2022-06-22 來源:工程師 發布文章
    1、介紹

    在進行調試和維護時,常常需要與單片機進行交互,獲取、設置某些參數或執行某些操作,nr_micro_shell正是為滿足這一需求,針對資源較少的MCU編寫的基本命令行工具。

    雖然RT_Thread組件中已經提供了強大的finsh命令行交互工具,但對于ROM、RAM資源較少的單片機,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增加量
    ROM63660+3832+26908
    RAM4696+1104+1304

    兩者配置都為

    • 最多3條歷史命令。
    • 支持Tab補全 。
    • 命令行最大長度為100。
    • 最多10個命令參數。
    • 命令行線程堆棧為512字節。

    nr_micro_shell演示效果如下

    圖片


    圖片

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

    相關的設置在按下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"
    
    int main(void)
    {
        /* 初始化 */
        shell_init();
    
        while(1)
        {
            if(USART GET A CHAR 'c')
            {
                /* nr_micro_shell接收字符 */
                shell(c);
            }
        }
    }

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

    #include "nr_micro_shell.h"
    
    int main(void)
    {
        unsigned int i = 0;
        //匹配好結束符配置 NR_SHELL_END_OF_LINE 0
        char test_line[] = "test 1 2 3n"
        /* 初始化 */
        shell_init();
        
        /* 初步測試代碼 */
        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*中實現一個命令函數。命令函數的原型如下

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

    argc是參數的數目。argv存儲每個參數的起始地址和內容。如果輸入字符串是

    test -a 1

    則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[]表中寫入

    const static_cmd_st static_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
    # 編譯可仿真執行文件
    make debug
    # 清除編譯生成文件
    make clean
    5、注意事項

    根據你的使用習慣使用NR_SHELL_USING_EXPORT_CMD選擇命令注冊方式。

    使用注冊表注冊命令時,確保您的工程中存在注冊表

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

    使用NR_SHELL_CMD_EXPORT()時確保,NR_SHELL_CMD_EXPORT()支持使用的編譯器,否則會報錯。

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

    原文地址:https://gitee.com/nrush/nr_micro_shell

    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

    絕對值編碼器相關文章:絕對值編碼器原理


    關鍵詞: 單片機

    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 景德镇市| 大厂| 通州区| 顺昌县| 闽侯县| 五常市| 长顺县| 苏州市| 南阳市| 宜昌市| 九寨沟县| 博客| 前郭尔| 理塘县| 新龙县| 佳木斯市| 和田县| 文山县| 建始县| 康保县| 拉萨市| 高淳县| 普兰县| 汪清县| 定边县| 阿图什市| 广宁县| 义马市| 绍兴市| 马鞍山市| 广平县| 佛学| 兴仁县| 威远县| 阜新市| 淳安县| 霍州市| 确山县| 青铜峡市| 兴义市| 南投市|