命令行是計算機系統(tǒng)中最重要的組件之一。它可以幫助開發(fā)人員更方便的控制系統(tǒng)。在調試過程中,可以讓開發(fā)人員隨時變更測試方法。
FPGA的成本越來越低,F(xiàn)PGA上的嵌入式系統(tǒng)(SOPC)也應用得越來越廣泛。但是相對其他成熟的計算機體系,SOPC系統(tǒng)現(xiàn)在還沒有命令行。為了更好的推廣SOPC應用,筆者開發(fā)了一個智能的命令行模塊,可以調用系統(tǒng)中的任意函數(shù),降低了開發(fā)人員的使用難度。在最小配置時,它只有大約 1000行代碼,占用14KB存儲容量,可以放在完全由FPGA片內(nèi)資源構成的計算機系統(tǒng)中。它的結構也具有很好的擴展性,開發(fā)人員可以結合自己的需求,輕松添加命令,豐富它的特性。
命令行框架設計
1 總體設計
好的命令行要具有擴展性,開發(fā)人員能輕松添加自己的命令;也要傻瓜化,簡單易于使用。
為了達到這兩個目的,可采用編譯器創(chuàng)建的數(shù)組作為命令的總索引數(shù)據(jù)結構。為每條命令創(chuàng)建一個變量,指定它放在一個命令行專用的段中;其中用段 “shell_cmd_tab”存放用戶主動創(chuàng)建的命令;用段“shell_cmd_tab_auto”存放系統(tǒng)中所有全局函數(shù)。創(chuàng)建變量只需調用宏 SHELL_CMD_DECL,提供命令名、命令說明和函數(shù)名即可。這樣就可以實現(xiàn)C語言函數(shù)、變量、段、內(nèi)存區(qū)域的自動映射過程。
命令的數(shù)據(jù)結構如下。
typedef struct _ncommand_t {
const char *name;
const char *descr;
shell_st_call cfunc;
} ncommand_t;
為了簡化命令的創(chuàng)建,定義下面這個宏來創(chuàng)建命令。
#define SHELL_CMD_DECL(name, usage, func) ncommand_t _shell_cmd_tab_##func _attribute_ ( (section( “.shell_cmd_tab”) ) )={ name, usage, func }; // small memory version
創(chuàng)建命令的實例如下:SHELL_CMD_DECL(“dump”, “Shows a memory dump”, hexdump); 大功率電感廠家 |大電流電感工廠