www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 工業(yè)控制 > 電子設(shè)計自動化

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

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

  
命令行框架設(shè)計

  
1 總體設(shè)計

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

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

  命令的數(shù)據(jù)結(jié)構(gòu)如下。

  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 連接腳本

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

  .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 動態(tài)函數(shù)表創(chuàng)建

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

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

  
4 自動命令參數(shù)個數(shù)

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

  
5 字符輸入

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

  
6 參數(shù)解析

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

  
7 函數(shù)解析

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


8 命令執(zhí)行

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

  
命令設(shè)計

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

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

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

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

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

  
優(yōu)化處理

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

  
在SOPC系統(tǒng)中的應(yīng)用

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

  智能命令行模塊也可以作為NIOS II IDE的一個實例。先在“nios2edsexamplessoftware”目錄下為命令行創(chuàng)建一個子目錄shell_standard,再以其他軟件實例的template.xml為模板創(chuàng)為命令行建一個template.xml文件,然后復(fù)制命令行模塊的所有文件到這個目錄中。這樣,用戶在創(chuàng)建工程時,直接選中智能命令行模板,就可以使用智能命令行模塊了。


本文來源于與非網(wǎng) http://www.eefocus.com
原文地址:http://www.eefocus.com/article/10-08/2075521282019445.html

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

在現(xiàn)代電子系統(tǒng)中,電源扮演著核心角色,如同人體的心臟,為整個系統(tǒng)穩(wěn)定運行提供不可或缺的動力支持。從日常生活中的智能設(shè)備,到復(fù)雜精密的工業(yè)控制系統(tǒng),再到關(guān)乎國計民生的航空航天、醫(yī)療等關(guān)鍵領(lǐng)域,電源的可靠性直接決定了系統(tǒng)的穩(wěn)...

關(guān)鍵字: 電源 設(shè)備 系統(tǒng)

在科技飛速發(fā)展的當下,5G 技術(shù)正以前所未有的態(tài)勢席卷各個行業(yè),汽車領(lǐng)域也不例外。5G 的引入,猶如為汽車行業(yè)注入了一劑強大的 “催化劑”,徹底顛覆了傳統(tǒng)汽車的運作模式。憑借其令人驚嘆的高速率、卓越的連接性以及極低的延遲...

關(guān)鍵字: 汽車 5G 智能

為保持地下綜合管廊良好的運行環(huán)境 , 需對管廊環(huán)境與設(shè)備進行監(jiān)控 。鑒于此 ,設(shè)計并實現(xiàn)了一種高效 、可靠的針對管廊環(huán)境與設(shè)備的智能化監(jiān)控方法 。該方法通過對環(huán)境參數(shù)的實時可靠采集 ,對設(shè)備有效控制以及智能聯(lián)動和模式控制...

關(guān)鍵字: 綜合管廊 環(huán)境與設(shè)備 智能 監(jiān)控

在現(xiàn)代計算機中,CPU(中央處理器)是最重要的組成部分之一。它負責執(zhí)行程序指令和處理數(shù)據(jù),因此CPU的性能直接影響到計算機的整體運行效率。然而,許多用戶在使用計算機時可能會遇到CPU占用率過高的問題,這不僅會導致計算機運...

關(guān)鍵字: CPU 系統(tǒng)

隨著人工智能、大數(shù)據(jù)、物聯(lián)網(wǎng)等新一代技術(shù)的蓬勃發(fā)展,物流行業(yè)正經(jīng)歷著前所未有的變革。物流智慧化改造,即以智能化、自動化為核心,通過引入先進的技術(shù)手段,優(yōu)化物流流程,提升運營效率,已成為物流行業(yè)發(fā)展的重要趨勢。智能物流系統(tǒng)...

關(guān)鍵字: 物流 智能 技術(shù)

在現(xiàn)代科技和工業(yè)領(lǐng)域,電源的穩(wěn)定性和可靠性是確保設(shè)備正常運行和系統(tǒng)穩(wěn)定工作的基石。然而,電源系統(tǒng)的復(fù)雜性使得其可靠性預(yù)測成為一個極具挑戰(zhàn)性的任務(wù)。本文將從多個角度探討電源可靠性如何實現(xiàn)更精準的預(yù)測,以期為相關(guān)領(lǐng)域的研究和...

關(guān)鍵字: 電源 可靠性 系統(tǒng)

9月4日消息,據(jù)國際星閃聯(lián)盟官方介紹,近期面向智能社會的先進技術(shù)多樣化與產(chǎn)品戰(zhàn)略論壇在日本成功舉辦。

關(guān)鍵字: 星閃 智能

hmi是Human Machine Interface 的縮寫,"人機接口",也叫人機界面。人機界面(又稱用戶界面或使用者界面)是系統(tǒng)和用戶之間進行交互和信息交換的媒介, 它實現(xiàn)信息的內(nèi)部形式與人類可以接受形式之間的轉(zhuǎn)換...

關(guān)鍵字: HMI 人機界面 系統(tǒng)

在復(fù)位電路中,電容的作用是給系統(tǒng)提供恒定的電源電壓,從而保證開機時系統(tǒng)能夠正確地執(zhí)行初始化和自檢過程。因此,選擇合適大小的電容對于系統(tǒng)的穩(wěn)定性和性能至關(guān)重要。

關(guān)鍵字: 復(fù)位電路 電容 系統(tǒng)
關(guān)閉