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ì)于ROM、RAM資源較少的單片機(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ì)比
原始工程 | 添加nr_micro_shell增加量 | 添加finsh增加量 | |
---|---|---|---|
ROM | 63660 | +3832 | +26908 |
RAM | 4696 | +1104 | +1304 |
- 最多3條歷史命令。
- 支持Tab補(bǔ)全 。
- 命令行最大長(zhǎng)度為100。
- 最多10個(gè)命令參數(shù)。
- 命令行線程堆棧為512字節(jié)。
1.1 目錄結(jié)構(gòu)
名稱 | 說明 |
---|---|
docs | 文檔目錄,包含演示的GIF圖片等 |
examples | 例子目錄,包括命令函數(shù)示例: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.--->
相關(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"
intmain(void)
{
/*初始化*/
shell_init();
while(1)
{
if(USARTGETACHAR'c')
{
/*nr_micro_shell接收字符*/
shell(c);
}
}
}
建議直接使用硬件輸入前,建議使用如下代碼(確??梢哉4蛴⌒畔?,驗(yàn)證nr_micro_shell是否可以正常運(yùn)行
#include"nr_micro_shell.h"
intmain(void)
{
unsignedinti=0;
//匹配好結(jié)束符配置NR_SHELL_END_OF_LINE0
chartest_line[]="test123
"
/*初始化*/
shell_init();
/*初步測(cè)試代碼*/
for(i=0;isizeof(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*中實(shí)現(xiàn)一個(gè)命令函數(shù)。命令函數(shù)的原型如下
voidyour_command_funtion(charargc,char*argv)
{
.....
}
argc是參數(shù)的數(shù)目。argv存儲(chǔ)每個(gè)參數(shù)的起始地址和內(nèi)容。如果輸入字符串是
test-a1
則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[] 表中寫入
conststatic_cmd_ststatic_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í)行文件
makedebug
#清除編譯生成文件
makeclean
5
注意事項(xiàng)
根據(jù)你的使用習(xí)慣使用NR_SHELL_USING_EXPORT_CMD選擇命令注冊(cè)方式。使用注冊(cè)表注冊(cè)命令時(shí),確保您的工程中存在注冊(cè)表
conststatic_cmd_ststatic_cmd[]=
{
.....
{"",NULL}
};
使用NR_SHELL_CMD_EXPORT()時(shí)確保,NR_SHELL_CMD_EXPORT()支持使用的編譯器,否則會(huì)報(bào)錯(cuò)。nr_micro_shell 不支持ESC鍵等控制鍵(控制符)。
原文標(biāo)題:一個(gè)開源MCU級(jí)命令行交互組件
文章出處:【微信公眾號(hào):MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
mcu
+關(guān)注
關(guān)注
146文章
16792瀏覽量
349319 -
Linux
+關(guān)注
關(guān)注
87文章
11161瀏覽量
208459 -
Shell
+關(guān)注
關(guān)注
1文章
360瀏覽量
23234 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1249瀏覽量
39717
原文標(biāo)題:一個(gè)開源MCU級(jí)命令行交互組件
文章出處:【微信號(hào):mcugeek,微信公眾號(hào):MCU開發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論