相信大家對shell都不會陌生,嵌入式Linux系統常用的busybox的sh,PC Linux中的bash,fish,zsh等,一個基本的shell要實現包括以下幾個功能命令編輯器,包括命令的退格,刪除,插入
終端支持,如支持VT100,VT101等
歷史記錄的實現
命令的解析
今天阿圓給大家帶來的是一款實現精巧的shell即NT-Shell(Natural Tiny Shell),它的主要特點有兼容VT100終端
簡單實現,輸入輸出及命令處理就只需要三個回調函數
完全兼容C89
沒有任何依賴,包括libc!(裡面有好多代碼也值得我們學習)
不需要動態內存分配
代碼量小,ROM10K,RAM只需要1K
它支持的特殊按鍵除了方向鍵,Delete,Backspace外還支持如CTRL+A (回到行首),CTRL+E(跳到行未)等,阿圓我試了試似乎說好支持的TAB,HOME,END支持得並不好,不過基本不影響使用。
Advertisements
那趕快來看下它長什麼樣吧!
可以看到CTRL+C(取消行)也是可以支持,輸入help命令就會有相應的命令反饋,而輸入錯誤的命令就會提示unknown command found,命令還支持參數,如info sys可以看系統的信息(這裡還是STM32啦)和版本號等。麻雀雖小,五臟俱全啊!
那我們現在就開始NT-Shell之旅吧!
[1]下載最新版本,並添加到STM32工程
https://www.cubeatsystems.com/ntshell/resources/ntshell-v0.3.1.tar.gz
解壓后將core和util添另到STM32工程
STM32工程阿圓就不多解釋啦,必須帶UART,不然沒法用的。由於他完全兼容C89且沒有任何依賴,編譯一次通過。
Advertisements
[2]添加串口輸入輸出函數uart_getc(),uart_puts()及printf函數
這些都是STM32基本功,不懂得就去翻阿圓以前的文章嘍
這裡還要定義好文本處理的回調函數
[3]定義好ntshell_t ntshell並進行初始化
這樣就可以啦~
關於usercmd就是下載的包里的src\sample\target\nxp-lpc824\lpc_monitor\src\usercmd.c,大家自行參考
[4]下載調試,運行就可以了~移植過程非常簡單
阿圓現在也在考慮將代碼放到GitHub上,等阿圓準備好就統一放出鏈接
阿圓在看這個示例時發現了這個NT-Shell里的不少好東西可以值得學習,比如簡單的RingBuffer實現,大家可以去下載來看
今天就這麼里啦,謝謝大家!(最近工作比較忙更新不及時,大家見諒!)