新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 智能命令行在SOPC系統(tǒng)中的設計

智能命令行在SOPC系統(tǒng)中的設計

作者: 時間:2011-04-10 來源:網絡 收藏

行是計算機中最重要的組件之一。它可以幫助開發(fā)人員更方便的控制。在調試過程中,可以讓開發(fā)人員隨時變更測試方法。

本文引用地址:http://m.butianyuan.cn/article/150863.htm

  FPGA的成本越來越低,FPGA上的嵌入式()也應用得越來越廣泛。但是相對其他成熟的計算機體系,系統(tǒng)現在還沒有行。為了更好的推廣應用,筆者開發(fā)了一個行模塊,可以調用系統(tǒng)中的任意函數,降低了開發(fā)人員的使用難度。在最小配置時,它只有大約1000行代碼,占用14KB存儲容量,可以放在完全由FPGA片內資源構成的計算機系統(tǒng)中。它的結構也具有很好的擴展性,開發(fā)人員可以結合自己的需求,輕松添加命令,豐富它的特性。

  命令行框架

  1 總體

  好的命令行要具有擴展性,開發(fā)人員能輕松添加自己的命令;也要傻瓜化,簡單易于使用。

  為了達到這兩個目的,可采用編譯器創(chuàng)建的數組作為命令的總索引數據結構。為每條命令創(chuàng)建一個變量,指定它放在一個命令行專用的段中;其中用段“shell_cmd_tab”存放用戶主動創(chuàng)建的命令;用段“shell_cmd_tab_auto”存放系統(tǒng)中所有全局函數。創(chuàng)建變量只需調用宏SHELL_CMD_DECL,提供命令名、命令說明和函數名即可。這樣就可以實現C語言函數、變量、段、內存區(qū)域的自動映射過程。

  命令的數據結構如下。

  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);

  2 連接腳本

  在連接腳本里指定段的位置是簡化命令行使用流程的關鍵。GCC使用PROVIDE定義變量。筆者使用PROVIDE定義了各個段的起始地址和結束地址,從而可以在代碼中使用段地址查詢到所有命令。在編譯器使用的連接腳本中添加如下行定義函數表。

  .shell :

  {

  PROVIDE (__ram_shell_start = ABSOLUTE(.));

  . = ALIGN(32 / 8);

  PROVIDE (__ram_shell_cmd_tab_begin = ABSOLUTE(.));

  *(.shell_cmd_tab .shell_cmd_tab.*)

  PROVIDE (__ram_shell_cmd_tab_end = ABSOLUTE(.));

  PROVIDE (__ram_shell_cmd_tab_auto_begin = ABSOLUTE(.));

  *(.shell_cmd_tab_auto .shell_cmd_tab_auto.*)

  PROVIDE (__ram_shell_cmd_tab_auto_end = ABSOLUTE(.));

  *(.shell .shell.*)

  . = ALIGN(32 / 8);

  PROVIDE (__ram_shell_end = ABSOLUTE(.));

  } > ddr_sdram


上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉