国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

智能命令行設計及其在SOPC系統中的應用

發布時間:2010-8-10 15:53    發布者:lavida
關鍵詞: SoPC , 命令行
命令行是計算機系統中最重要的組件之一。它可以幫助開發人員更方便的控制系統。在調試過程中,可以讓開發人員隨時變更測試方法。  

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

命令行框架設計  

1 總體設計  

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

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

命令的數據結構如下。  

typedef struct _ncommand_t {  

const char *name;  

const char *descr;  

shell_st_call cfunc;  

} ncommand_t;  

為了簡化命令的創建,定義下面這個宏來創建命令。  

#define SHELL_CMD_DECL(name, usage, func) ncommand_t _shell_cmd_tab_##func _attribute_ ( (section( “.shell_cmd_tab”) ) )={ name, usage, func }; // small memory version  

創建命令的實例如下: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  

3 動態函數表創建  

由工具自動根據系統中的全局函數創建的命令被稱為自動命令。自動命令使用戶可以在命令行中調用任意普通函數,即使開發人員沒有聲明這些函數為命令。自動命令也需要一個數組包含系統中所有全局函數的信息,這個表為動態函數表。使用一個腳本根據系統的可執行文件自動生成動態函數表。要先編譯軟件,生成可執行文件;再調用腳本創建動態函數表;最后再編譯出包含動態函數表的可執行文件。  

在腳本中先使用GNU的nm工具從可執行文件導出所有全局符號,再使用grep提取出包括函數名的行,接著使用cut刪除函數名前的地址信息,使用sed將字符T替換為創建命令的宏SHELL_CMD_DECL_AUTO,并在行尾添加括號。最后將所有這些信息寫入一個C源代碼文件,交給編譯器編譯,就能得到一個動態函數表。  

4 自動命令參數個數  

為了便于開發人員使用,自動命令最好能適應所有函數類型,假設都是unsigned int的函數類型。對于可以成功轉化為unsigned int類型整數的參數,將真實的值傳遞給函數;對于其他參數,則將參數作為一個字符串傳遞給函數。  

5 字符輸入  

命令行從標準輸入設備中獲取字符。命令行只接受可打印的字符和特定的控制字符。如果收到了回車或者換行字符,代表用戶完成了命令輸入,就解析命令。解析命令前,去掉多余的空格符(0x20),即不允許有連續的兩個或多個空格符存在,命令的最后也不能有空格符。  

6 參數解析  

命令行模塊要從用戶輸入的字符串中解析出命令名和參數。為命令提供與DOS和Linux類似的兩個參數,argc和argv。argc表示參數的個數;argv是字符串指針的數組,最多10個字符串。argv[0]是第一個參數,argv[1]是第二個參數,如此類推。  

7 函數解析  

在代碼中使用SHELL_CMD_DECL創建了命令列表,使用工具創建了自動命令列表。這兩個表實際上都是數據結構ncommand_t的數組,其中有命令名和函數地址的信息。解析函數實際上就是根據在這兩個數組中依次比較函數名。如果用戶輸入的命令名和數組中的命令名一致,就使用對應的函數地址。  

8 命令執行  

得到函數地址后,就可以執行命令對應的函數。對于主動創建的命令,使用argc和argv作為參數。對于自動命令,命令行模塊先嘗試將原始參數轉換無符號整數。如果成功,使用無符號整數作為參數;如果不成功,則將原始參數的地址作為參數,實際上是一個字符串。  

命令設計  

完成總體設計后,就可以逐個添加開發需要的命令了。  

● 幫助命令用于顯示所有命令名及其用法。  

● IO命令用來訪問輸入輸出設備的寄存器,可以實現對外部設備的控制。  

● 存儲器命令用來顯示、修改存儲器的值。最基本的包括:dump命令顯示指定位置的內存的值;modify命令用來修改指定內存單元的值。  

● 用戶在使用過程中,會使用很多命令。能夠查詢歷史命令、循環執行歷史命令將給用戶帶來很多方便。因此筆者實現了三條命令。history_show用來顯示所有已經使用了的命令;history_del用來刪除指定的歷史命令;history_exec用來執行指定的歷史命令。  

優化處理  

Altera提供了簡化版的輸出函數alt_printf來替代printf,降低了嵌入式系統的開銷,筆者在命令行中也支持這個這個函數。命令行的代碼中,只調用SHELL_PRINT;在頭文件中,根據用戶設置,SHELL_PRINT使用標準的printf或者簡化的alt_printf。如果使用簡化的alt_printf,這個命令行占用的內存小于14KB。  

在SOPC系統中的應用  

Altera為SOPC系統開發提供的集成開發環境NIOS II IDE附帶了多個軟件實例。在使用這些軟件實例時,用戶只需要選擇模塊,完全不用新編代碼,非常簡單。  

智能命令行模塊也可以作為NIOS II IDE的一個實例。先在“nios2edsexamplessoftware”目錄下為命令行創建一個子目錄shell_standard,再以其他軟件實例的template.xml為模板創為命令行建一個template.xml文件,然后復制命令行模塊的所有文件到這個目錄中。這樣,用戶在創建工程時,直接選中智能命令行模板,就可以使用智能命令行模塊了。
本文地址:http://www.qingdxww.cn/thread-20651-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
  • 更佳設計的解決方案——Microchip模擬開發生態系統
  • 你仿真過嗎?使用免費的MPLAB Mindi模擬仿真器降低設計風險
  • 想要避免發生災難,就用MPLAB SiC電源仿真器!
  • 貿澤電子(Mouser)專區
關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 性福宝丝瓜视频下载 | 伊人青青操 | 亚洲最大福利视频网 | 亚洲日本在线免费观看 | 特黄色一级毛片 | 在线免费观看a视频 | 免费xxxx日本大片在线观看 | 欧美激情一级欧美精品 | 国产va免费精品观看精品 | 免费一级毛片在线视频观看 | 久久公开视频 | 日本精品视频在线观看 | 天堂网www在线资源 天堂网www在线观看 | 免费高清在线观看a网站 | 天天天操操操 | 午夜视频在线免费播放 | 免费人成网 | 亚洲国产欧美日韩 | 赌侠1999| 亚洲欧美日本国产综合在线 | 日韩精品中文字幕一区二区三区 | 天天做天天玩天天爽天天 | 果冻传媒和91制片厂a | 欧美日韩精品国产一区二区 | 羞羞网站在线观看 | 国产精品国产三级国产 | 日韩精品在线一区 | 国内自拍网 | 欧美1区| 国产欧美成人一区二区三区 | 免费在线观看国产 | 亚洲欧美在线综合一区二区三区 | 亚洲色视频在线播放网站 | 成人伊人亚洲人综合网站222 | 亚洲男人的性天堂 | 91视频官网| 色丁香综合 | 亚洲国产精品成人综合久久久 | 在线精品国精品国产不卡 | 国产精品久久久久尤物 | 日韩一区国产二区欧美三 |