《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > SOPC系統的智能命令行設計
SOPC系統的智能命令行設計
摘要: 相對其他成熟的計算機體系,SOPC系統現在還沒有命令行。為了更好的推廣SOPC應用,筆者開發了一個智能的命令行模塊,可以調用系統中的任意函數,降低了開發人員的使用難度。
關鍵詞: SoPC 命令行 FPGA NIOS II
Abstract:
Key words :

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

  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.eefocus.com
原文地址:http://www.eefocus.com/article/10-08/2075521282019445.html

此內容為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>
          午夜精品免费视频| 欧美屁股在线| 鲁鲁狠狠狠7777一区二区| 今天的高清视频免费播放成人| 午夜精品理论片| 精品91视频| 国产精品久久久久久五月尺| 欧美日韩一级片在线观看| 欧美福利在线| 亚洲看片网站| 欧美高清视频免费观看| 999在线观看精品免费不卡网站| 亚洲国产另类精品专区| 国产一区二区视频在线观看| 久久国内精品自在自线400部| 欧美一区二区三区婷婷月色| 国产精品盗摄一区二区三区| 国内久久精品| 校园激情久久| 欧美高清视频| 欧美日韩免费在线视频| 国内精品美女在线观看| 亚洲精品欧美精品| 欧美在线亚洲| 最近中文字幕日韩精品| 男人天堂欧美日韩| 国产精品日本欧美一区二区三区| 国产精品久久久久久妇女6080| 欧美网站在线观看| 亚洲视频碰碰| 亚洲一区精彩视频| 欧美日韩国产精品一区| 亚洲一区在线直播| 在线成人激情| 国产一区二区三区久久久久久久久| 国产精品日韩欧美| 一区二区三区欧美在线观看| 亚洲婷婷在线| 一本久久a久久免费精品不卡| 亚洲国产欧美在线人成| 欧美成人资源| 亚洲影音一区| 国产美女精品人人做人人爽| 亚洲一区视频在线观看视频| 国产精品永久入口久久久| 亚洲风情在线资源站| 久久国产天堂福利天堂| 久久视频一区| 国内精品久久久久久影视8| 欧美精品国产一区| 欧美日韩日日骚| 激情久久久久| 欧美午夜美女看片| 欧美午夜不卡影院在线观看完整版免费| 国产精品videosex极品| 国产精品久久久久久久久婷婷| 久久精品三级| 亚洲一区免费看| 国产亚洲一区二区精品| 亚洲精品综合久久中文字幕| 在线一区二区三区四区| 国产精品丝袜白浆摸在线| 欧美mv日韩mv国产网站| 老司机精品视频一区二区三区| 免费观看不卡av| 亚洲免费观看高清完整版在线观看熊| 亚洲一区二区高清| 欧美精品自拍偷拍动漫精品| 牛夜精品久久久久久久99黑人| 欧美日韩国产高清视频| 国产精品久久国产精品99gif| 亚洲午夜激情免费视频| 欧美精品色综合| 国产精品99久久久久久人| 欧美日韩无遮挡| 精品不卡视频| 欧美阿v一级看视频| 亚洲一区欧美一区| 99国产欧美久久久精品| 欧美一区二区视频在线观看| 亚洲国产合集| 老司机免费视频一区二区| 国产欧美va欧美va香蕉在| 欧美一进一出视频| 91久久国产综合久久蜜月精品| 亚洲欧美三级伦理| 欧美午夜免费| 这里是久久伊人| 国产精品久久久久aaaa樱花| 欧美一级播放| 一区二区激情视频| 悠悠资源网久久精品| 精品动漫3d一区二区三区免费版| 韩日成人av| 欧美精品激情在线观看| 欧美激情综合色综合啪啪| 日韩一区二区精品视频| 国产精品影院在线观看| 久久精品亚洲国产奇米99| 国内精品国语自产拍在线观看| 欧美视频在线播放| 亚洲国产高清aⅴ视频| 久久久女女女女999久久| 久久九九久精品国产免费直播| 99re6热在线精品视频播放速度| 国产精品久久久久9999| 午夜亚洲福利| 国产精品大片| 久久国产福利| 欧美日韩亚洲激情| 狠狠色香婷婷久久亚洲精品| 欧美福利一区二区| 亚洲欧美日韩人成在线播放| 影音先锋亚洲电影| 国产一区二区日韩| 亚洲一区二区三区视频播放| 欧美日韩国产一级| 久久久激情视频| 国产精品一区久久久久| 欧美精品福利视频| 激情综合色综合久久| 久久精品91久久久久久再现| 中文在线不卡视频| 一区二区亚洲精品| 欧美激情一区二区久久久| 午夜天堂精品久久久久| 欧美国产日本在线| 亚洲欧美日本视频在线观看| 欧美一级日韩一级| 久久精品视频在线观看| 欧美综合77777色婷婷| 午夜宅男久久久| 国产视频在线观看一区二区| 欧美啪啪成人vr| 精久久久久久久久久久| 欧美制服第一页| 国产精品羞羞答答xxdd| 国产乱码精品一区二区三区五月婷| 欧美一级视频免费在线观看| 先锋a资源在线看亚洲| 国产人久久人人人人爽| 亚洲一二三区视频在线观看| 欧美乱人伦中文字幕在线| 欧美刺激午夜性久久久久久久| 久久久久www| 国产乱码精品一区二区三区五月婷| 日韩一本二本av| 亚洲精品日日夜夜| 噜噜爱69成人精品| 亚洲国产中文字幕在线观看| 国产精品porn| 欧美日韩一卡| 国精产品99永久一区一区| 欧美日韩亚洲不卡| 亚洲视频免费在线观看| 国产精品久久7| 在线电影院国产精品| 欧美一区二粉嫩精品国产一线天| 国产欧美一区二区精品婷婷| 久久国产欧美日韩精品| 亚洲国产精品久久人人爱蜜臀| 久久一区二区三区四区五区| 永久555www成人免费| 久久视频一区| 亚洲欧洲在线免费| 亚洲欧美国产毛片在线| 国产精品红桃| 欧美在线观看www| 久久久久久综合| 欧美视频在线观看 亚洲欧| 久久不射2019中文字幕| 欧美午夜精品久久久久久超碰| 欧美精品97| 精品福利av| 99精品黄色片免费大全| 欧美超级免费视 在线| 欧美成ee人免费视频| 亚洲精品一区二区三| 久热成人在线视频| 亚洲免费大片| 亚洲国产1区| 久久在线精品| 欧美粗暴jizz性欧美20| 国产自产女人91一区在线观看| 国内精品久久久久久久97牛牛| 欧美在线黄色| 欧美午夜影院| 久久久久久久尹人综合网亚洲| 韩国av一区二区| 国产精品高清免费在线观看| 女人色偷偷aa久久天堂| 亚洲自拍高清| 欧美人成在线视频| 国产日韩专区| 国产色视频一区| 亚洲精品字幕| 女仆av观看一区| 久久亚洲国产精品日日av夜夜| 亚洲免费综合| 欧美黑人国产人伦爽爽爽| 一区二区视频免费在线观看| 亚洲综合色自拍一区| 欧美大色视频| 欧美在线免费视屏| 欧美在线一级视频| 午夜在线精品| 亚洲国产成人av好男人在线观看| 国产精品视频免费观看www| 欧美啪啪一区| 99re6热在线精品视频播放速度| 欧美日韩在线不卡一区| 亚洲午夜视频在线观看| 欧美性大战久久久久久久| 亚洲一区美女视频在线观看免费| 欧美在线视频在线播放完整版免费观看| 在线观看视频一区二区欧美日韩| 欧美日韩网址| 国产欧美日韩另类一区| 国产午夜精品久久久久久久| 国产欧美一区二区精品秋霞影院| 午夜精品久久久久久久久久久久| 欧美日韩不卡视频| 亚洲一区二区三区高清不卡| 国产九九精品| 欧美电影在线观看| 欧美另类99xxxxx| 欧美三级乱码| 国产精品v欧美精品∨日韩| 久久免费少妇高潮久久精品99| 亚洲一区视频在线| 狠狠操狠狠色综合网| 日韩视频一区二区三区在线播放免费观看| 亚洲韩国日本中文字幕| 国产欧美亚洲精品| 国产欧美精品日韩精品| 欧美激情视频在线播放| 欧美日韩日本网| 亚洲天堂第二页| 国产视频精品xxxx| 国产精品久久国产愉拍| 激情综合在线| 欧美有码在线视频| 国产情人综合久久777777| 国产精品男gay被猛男狂揉视频| 国语自产在线不卡| 欧美v国产在线一区二区三区| 久久久久久午夜| 麻豆国产精品777777在线| 亚洲黄色影片| 亚洲午夜91| 欧美夫妇交换俱乐部在线观看| 亚洲第一天堂无码专区| 欧美视频中文一区二区三区在线观看| 亚洲男同1069视频| 欧美猛交免费看| 一本色道久久综合狠狠躁篇怎么玩| 久久精品中文| 久热国产精品| 国产在线视频欧美一区二区三区| 亚洲午夜一区| 亚洲三级毛片| 午夜久久黄色| 在线观看日韩av| 国产精品美女在线观看| 国产精品中文字幕欧美| 伊人狠狠色j香婷婷综合| 一区二区三区欧美亚洲| 欧美jizz19性欧美| 欧美日韩视频在线一区二区观看视频| 久久天天躁狠狠躁夜夜爽蜜月| 欧美高清视频一区二区三区在线观看| 欧美日韩1区2区| 亚洲精品看片| 麻豆精品在线视频| 最新日韩在线| 久久香蕉国产线看观看网| 欧美高潮视频| 欧美在线一区二区三区| 欧美日韩亚洲视频| 欧美一区国产一区| 在线观看的日韩av| 欧美精品v国产精品v日韩精品| 国语自产精品视频在线看抢先版结局| 欧美专区福利在线| 久久精品中文字幕一区二区三区| 欧美在线欧美在线| 欧美亚洲视频在线看网址| 一区二区三区中文在线观看| 国内揄拍国内精品少妇国语| 免费人成网站在线观看欧美高清| 亚洲美女淫视频| 欧美 日韩 国产 一区| 欧美1区免费| 欧美日本韩国一区| 亚洲欧美精品suv| 一区二区三区成人精品| 亚洲欧美日韩国产中文在线| 国产免费成人| 在线观看国产日韩| 欧美日韩人人澡狠狠躁视频| 欧美日韩亚洲网| 国产精品jizz在线观看美国| 亚洲国产精品va在线看黑人动漫| 欧美影院一区| 久热爱精品视频线路一| 欧美成年人视频网站| 欧美激情在线狂野欧美精品| 一区二区三区回区在观看免费视频| 欧美日韩高清免费| 欧美午夜不卡视频| 久久免费99精品久久久久久| 欧美a级片一区| 亚洲福利视频二区| 亚洲一区二区精品| 亚洲电影免费观看高清完整版在线| 亚洲精品精选| 国产日韩欧美视频在线| 开元免费观看欧美电视剧网站| 欧美午夜欧美| 欧美日韩三级| 亚洲欧美一区二区三区在线| 国内视频一区| 欧美日韩亚洲一区二区三区| 欧美影院久久久| 亚洲国产精品久久人人爱蜜臀| 久久久噜噜噜久久中文字幕色伊伊| 国产精品亚发布| 亚洲视频在线观看三级|