《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 智能命令行設計及其在SOPC系統中的應用
智能命令行設計及其在SOPC系統中的應用
Altera
付漢杰
摘要: 命令行是計算機系統中最重要的組件之一。它可以幫助開發人員更方便的控制系統。在調試過程中,可以讓開發人員隨時變更測試方法。
關鍵詞: SoPC 命令
Abstract:
Key words :

命令" title="命令">命令行是計算機系統中最重要的組件之一。它可以幫助開發人員更方便的控制系統。在調試過程中,可以讓開發人員隨時變更測試方法。


FPGA的成本越來越低,FPGA上的嵌入式系統(SOPC" title="SOPC">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文件,然后復制命令行模塊的所有文件到這個目錄中。這樣,用戶在創建工程時,直接選中智能命令行模板,就可以使用智能命令行模塊了。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          国产片一区二区| 亚洲高清在线观看一区| 国产色爱av资源综合区| 国产精品v欧美精品v日韩精品| 在线亚洲激情| 午夜精品理论片| 一区二区欧美在线观看| 国产亚洲欧美另类中文| 国产美女诱惑一区二区| 永久555www成人免费| 欧美电影免费观看高清完整版| 国产精品一卡| 欧美在线免费观看| 性色av一区二区三区红粉影视| 欧美另类综合| 免费观看成人| 亚洲视频每日更新| 亚洲永久在线观看| 国产精品日韩在线一区| 欧美精品日日鲁夜夜添| 悠悠资源网久久精品| 亚洲国产精品成人精品| 国产日韩欧美在线播放| 欧美一区高清| 亚洲欧美日韩精品综合在线观看| 一本色道久久88精品综合| 国内精品久久久久久| 亚洲欧洲精品一区二区三区| 永久免费毛片在线播放不卡| 国产精品美女| 亚洲精品影视在线观看| 久久久久国产一区二区三区四区| 一色屋精品视频免费看| 韩国欧美国产1区| 伊人春色精品| 久久米奇亚洲| 91久久精品国产91久久性色tv| 欧美激情一区二区三区不卡| 亚洲美女淫视频| 国产欧美欧洲在线观看| 牛牛精品成人免费视频| 国产精品一区久久| 国产日韩欧美综合精品| 国产精品99一区二区| 国外成人在线视频| 激情综合中文娱乐网| 国产精品视频网址| 亚洲欧美在线一区二区| 精品电影一区| 国产视频综合在线| 欧美成人69av| 久久嫩草精品久久久久| 国产精品99久久不卡二区| 欧美午夜欧美| 亚洲国产另类久久久精品极度| 欧美一区=区| 国产精品日韩精品欧美在线| 午夜精品久久久久99热蜜桃导演| 久久综合精品国产一区二区三区| 欧美日韩日日夜夜| 欧美日本一区二区高清播放视频| 欧美日韩美女在线观看| 欧美影片第一页| 欧美人在线视频| 欧美一区二区成人| 欧美日韩国产影片| 欧美日韩免费一区| 久久亚洲国产精品一区二区| 欧美日韩伊人| 国产精品免费视频xxxx| 欧美一区激情视频在线观看| 亚洲福利国产| 国产精品盗摄久久久| 女女同性女同一区二区三区91| 亚洲欧美日韩成人高清在线一区| 亚洲网站视频| 亚洲美女福利视频网站| 国产精品极品美女粉嫩高清在线| 国产精品日韩欧美一区二区三区| 久久久无码精品亚洲日韩按摩| 国产美女精品视频| 国产欧美精品国产国产专区| 免费在线观看日韩欧美| 久久久91精品国产| 国产一区二区三区在线观看网站| 欧美日韩国产精品成人| 久久久女女女女999久久| 久久美女艺术照精彩视频福利播放| 国产欧美精品xxxx另类| 国产午夜久久久久| 亚洲国产一区二区三区高清| 国产欧美 在线欧美| 欧美性猛交xxxx乱大交退制版| 欧美日韩色一区| 国模精品一区二区三区色天香| 亚洲欧美伊人| 国产精品人人做人人爽人人添| 在线日本欧美| 欧美一区精品| 激情欧美一区二区三区在线观看| 国产美女高潮久久白浆| 夜夜精品视频一区二区| 一二三四社区欧美黄| 国产亚洲在线观看| 日韩一区二区久久| 国产综合av| 久久精品30| 欧美视频网址| 国产精品无码专区在线观看| 国产伦一区二区三区色一情| 欧美精品一区在线发布| 最新高清无码专区| 亚洲在线一区| 久久久久久久久久码影片| 久久久久九九九| 一区二区三区在线视频观看| 国产三级精品在线不卡| 欧美一级视频一区二区| 欧美国产乱视频| 欧美国产日本韩| 在线精品视频在线观看高清| 国产精品高潮粉嫩av| 久久夜精品va视频免费观看| 夜夜爽99久久国产综合精品女不卡| 亚洲日本在线视频观看| 欧美精品一区二区高清在线观看| 正在播放日韩| 国产一区二区三区在线观看免费视频| 久久久久这里只有精品| 一本大道av伊人久久综合| 亚洲欧美日韩在线观看a三区| 国产欧美日韩另类视频免费观看| 欧美日韩一级视频| 国产精品一区二区你懂得| 欧美日韩精品一区二区| 欧美日本精品一区二区三区| 欧美一二区视频| 欧美日韩免费网站| 在线国产日韩| 国产免费成人在线视频| 99视频热这里只有精品免费| 国产精品v日韩精品v欧美精品网站| 在线观看国产日韩| 国产片一区二区| 亚洲国语精品自产拍在线观看| 国产精品极品美女粉嫩高清在线| 久久婷婷国产综合国色天香| 在线看日韩av| 国产精品你懂的在线欣赏| 亚洲色图制服丝袜| 亚洲第一页在线| 亚洲免费视频成人| 久久久91精品国产一区二区三区| 亚洲另类春色国产| 国产精品久久久久av| 国产精品免费aⅴ片在线观看| 欧美顶级少妇做爰| 99xxxx成人网| 久久久久久网| 久久高清一区| 夜夜嗨av一区二区三区免费区| 国产精品久久国产精品99gif| 欧美精品 国产精品| 国外成人在线视频网站| 亚洲国产一区二区视频| 99爱精品视频| 久久久久免费观看| 欧美日本免费一区二区三区| 99精品欧美一区二区三区| 国产精品午夜国产小视频| 在线成人性视频| 亚洲欧美日韩综合aⅴ视频| 国产免费亚洲高清| 久久野战av| 激情视频一区二区三区| 国产欧美一区二区精品仙草咪| 亚洲专区一区| 久久不射电影网| 欧美国产亚洲视频| 亚洲精品一区二区三区不| 国产精品视频网| 国产精品视频网| 久久―日本道色综合久久| 亚洲国产裸拍裸体视频在线观看乱了中文| 久久久久这里只有精品| 国产亚洲欧美一区二区三区| 麻豆精品视频在线观看视频| 99精品欧美一区二区蜜桃免费| 狠狠久久亚洲欧美专区| 久久精品123| 欧美激情视频一区二区三区不卡| 久久精品日产第一区二区| 狂野欧美激情性xxxx| 国产亚洲欧洲997久久综合| 一区二区久久久久| 国产精品高精视频免费| 亚洲已满18点击进入久久| 亚洲精美视频| 久久久久久亚洲精品不卡4k岛国| 久久先锋资源| 国内精品**久久毛片app| 国产日韩精品在线观看| 欧美精品在线视频观看| 欧美一级视频精品观看| 欧美日本不卡高清| 国产嫩草一区二区三区在线观看| 亚洲欧洲偷拍精品| 美女性感视频久久久| 另类国产ts人妖高潮视频| 免费成人性网站| 亚洲综合日韩在线| 在线精品视频在线观看高清| 玖玖国产精品视频| 亚洲国产精品一区二区www| 国产精品国产三级国产a| 国产欧美日本一区视频| 午夜国产欧美理论在线播放| 亚洲美女精品一区| 午夜精品电影| 久久亚洲一区二区| 国产精品地址| 欧美日韩a区| 欧美精品少妇一区二区三区| 欧美日韩蜜桃| 日韩视频欧美视频| 欧美网站大全在线观看| 老巨人导航500精品| 亚洲男人的天堂在线aⅴ视频| 亚洲私人影院在线观看| 好吊色欧美一区二区三区视频| 亚洲一区三区在线观看| 亚洲欧美成人精品| 国产欧美一区二区精品仙草咪| 国产精品视频一区二区高潮| 另类av一区二区| 欧美日韩精品不卡| 国模 一区 二区 三区| 欧美视频免费看| 国产日韩精品综合网站| 久久久久久久久久久久久久一区| 久久综合电影| 午夜欧美不卡精品aaaaa| 国产一区二区日韩精品| 欧美国产精品劲爆| 国产精品欧美日韩一区| 欧美大胆a视频| 亚洲激情国产| 午夜欧美不卡精品aaaaa| 国产一区欧美| 欧美日韩视频专区在线播放| 久久久久久久91| 亚洲综合视频1区| 亚洲午夜伦理| 亚洲乱码一区二区| 国产精品亚洲精品| 在线日韩av| 久久精品免费观看| 国产在线精品自拍| 欧美夫妇交换俱乐部在线观看| 鲁大师成人一区二区三区| 欧美午夜精品一区| 亚洲国产成人精品女人久久久| 亚洲欧美日韩一区二区在线| 国产自产在线视频一区| 免费观看30秒视频久久| 国产麻豆精品theporn| 亚洲男同1069视频| 久久精品国产免费| 国产一区二区欧美日韩| 久久精品视频网| 影音先锋久久久| 欧美成人免费在线| 亚洲美女av黄| 毛片基地黄久久久久久天堂| 久久日韩精品| 亚洲精选91| 国产精品五月天| 日韩视频一区二区三区在线播放免费观看| 亚洲欧美自拍偷拍| 欧美+亚洲+精品+三区| 午夜欧美精品| 国产三级欧美三级| 久久免费视频在线观看| 亚洲专区免费| 久久综合九色九九| 免费人成精品欧美精品| 日韩小视频在线观看| 国产日韩欧美中文在线播放| 亚欧成人在线| 欧美一区午夜精品| 欧美一区二区三区四区高清| 欧美激情亚洲国产| 欧美韩日精品| 久久久久久自在自线| 午夜在线一区| 欧美福利视频一区| 欧美 亚欧 日韩视频在线| 欧美亚洲免费在线| 欧美激情性爽国产精品17p| 欧美日韩二区三区| 久久精品99| 欧美成在线观看| 久久精品国产亚洲高清剧情介绍| 欧美午夜大胆人体| 99视频+国产日韩欧美| 国产一区二区三区四区老人| 午夜精品久久久久久久久久久久| 欧美一区二区成人6969| 国产亚洲一本大道中文在线| 在线免费日韩片| 欧美日韩一区视频| 亚洲国产精品毛片| 久久久国产视频91| 欧美日韩一区二区三区在线观看免| 亚洲成色最大综合在线| 猛男gaygay欧美视频| 欧美日韩一区二区在线| 日韩一区二区久久| 久久久一二三| 国产精品久久久久毛片大屁完整版| 噜噜噜久久亚洲精品国产品小说| 亚洲美洲欧洲综合国产一区| 久久久不卡网国产精品一区| 亚洲一区欧美| 欧美日韩卡一卡二| 亚洲视频专区在线| 欧美视频在线看| 国产女人水真多18毛片18精品视频|