面向对象嵌入式系统开发7-嵌入式系统的实现
面向對象嵌入式系統開發7-嵌入式系統的實現
?如果說嵌入式系統的面向對象分析與設計涉及到抽象、思考和經驗的話,那么嵌入式系統的實現則涉及更多的實施細節。無論使用咋樣前言的技術方法,最終都需要把整個系統包括軟件的、機械的和電子的部分聚合成一個滿足應用需求的整體。
7.1 軟硬件協同設計與實現
?嵌入式系統最終是要在特定的硬件上運行。在系統分析階段,只考慮系統要完成哪些功能而不考慮系統的具體實現,因此分析的結果自然是建立在嵌入式系統軟硬件基礎上的。而在設計階段就要進行軟硬件的具體分工,并且在軟件方面的任何結構和行為設計都要考慮到硬件的具體實現能力。在硬件設計時,首先是要考慮實現系統功能的實際需要,然后再考慮如體積、尺寸、功耗等性能問題。
?嵌入式系統設計的主要挑戰或許就在于如何使相互競爭的設計指標同時達到最佳化。從過去到現在,大多數工程師或擅長軟件設計,或擅長硬件設計,但還較少兩者都擅長,軟件子系統和硬件子系統往往要分別進行設計,直到整個設計流程的末期再進行系統繼承。這種早期永久性的軟硬件分離顯然難以做到設計指標的最優化。
?在理論上,如果在設計過程的任何階段都能選擇用硬件或軟件來實現功能,就可以提供更好的最佳化系統。目前,可編程硬件技術(如PLD、FPGA、SOPC)的成熟是的軟硬件設計流程統一的觀點得到支持。現在,綜合工具以及把硬件設計者的基本任務轉變成順序程序,當然他們任然需要了解硬件使如何有這些程序綜合而來的。這樣,硬件和軟件的起點都是順序程序,強化了系統功能可以用硬件、軟件或二者的某種組合來實現的觀點。因此可以說:對于某個特定的功能而言,選擇硬件還是軟件實現只是在不同設計指標之間進行取舍,這些指標包括性能、功率、靈活性、體積大小、一次性開發成本、每單位產品成本等,這種設計實現嵌入式系統的觀點就稱為軟硬件協同設計。
?就目前的硬件技術發展和國內的實際情況,完全采用可編程硬件技術設計和實現嵌入式系統還不現實。目前采用前兩周方案設計實現嵌入式系統更為常見。即使使采用前兩種方案,也同樣存在軟硬件協同設計的問題,只是硬件的取舍不如第三種方案靈活而已。
?下面的討論主要針對前兩種方案實現系統的情況。
?在采用面向對象嵌入式系統開發時,分析模型使獨立于實現的。分析模型只針對系統領域概念和系統功能,模型中只表示出需要實現功能所應具備的邏輯結構。在設計階段要根據分析模型首先劃分硬件實現的功能和軟件實現的功能,及確定硬件體系結構和軟件體系結構,以及軟硬件之間的接口。
?目前,由于存在著各類學習開發裝置(如學習板、開發板、開發平臺等),并且這類開發平臺具有較好的可擴展性,完全可以在開發平臺上完成軟件系統的開發,最后確定系統所需要的硬件。
7.2 嵌入式系統的硬件實現
?當嵌入式系統的硬件子系統確立以后,其硬件實現通常是獨立進行的。如果使用開發平臺開發嵌入式軟件,軟件實現和硬件實現兩者可以獨立進行。
7.2.1 微處理器的選擇
?處理器的選擇通常取決于技術和非技術兩方面因素。從技術角度看,必須選擇在功率、大小和成本約束下,能達到所需處理速度的微處理器‘非技術方面因素有開發環境、對處理器的熟悉程度、授權等等。
7.2.2 外圍級接口電路的確定
?嵌入式外圍級接口電路是指在一個嵌入式系統硬件構成中,除了核心控制部件(即嵌入式微處理器)以外的各種存儲器、輸入/輸出接口、人機接口的顯示/鍵盤、串行通信接口等等。
1.存儲器類型
?存儲器是嵌入式系統中存儲數據和程序的功能部件。
?靜態存儲其驅動電路簡單且速度塊,而動態存儲器由于需要定時刷新而是的驅動電路變得相對復雜,但這類存儲器單位面積上存儲容量大。他們在嵌入式系統中主要用來存儲運行時的對象,如活動的任務程序、數據結構、變量等。
?非易失線程存儲器主要用來存放程序或靜態數據,在這類存儲器中存放的內容可以直接在其所在的地址空間中運行,也可以運行前裝入到RAM中,而在RAM中運行其代碼。這類存儲器主要存放系統初始配置程序、系統啟動程序bootloader、固化運行的任務程序和各類查找表等。
?非易失非線性存儲器通常也稱為外存,這主要是由于存在這類存儲器中的數據不同直接通過微處理器運行。這類存儲器在嵌入式系統中主要來存儲需要運行時加載的程序、運行時需要加載和處理的數據、系統運行時得到的大量數據等。
2.通信接口
?目前在通用計算器中所有的通信接口在嵌入式系統領域中都有廣泛的應用,其中包括同步串口、RS-232C接口、通用串行總線USB接口、紅外先IrDA接口、串行外圍設備接口SPI、I2C控制總線接口、I2S音頻總線接口、CAN總線接口、無線藍牙接口、以太網接口、IEEE1394和JTAG接口等。
?一般系統開發調試期間,通過在主機運行的調試器上輸入控制命令,再通過UART或JTAG接口連接到目標機上的調試代理來完成系統的各項調試功能。以太網以及稱為嵌入式系統較為常見的網絡接口。USBj接口和IEEE1394接口普遍用來作為數據線數字設備同嵌入式計算機數據傳輸的接口,如數碼照相機、數碼攝像機等。再無線數據傳輸中,常見的由IEEE802.11系列無線網絡傳輸接口、藍牙接口以及紅外接口等。
3.輸入/輸出設備
?簡單的輸入設備可能只有一個開關或按鈕,而復雜的輸入設備可以是專用鍵盤、掃描儀等。簡單的輸出設備可能只有一只或幾只發光二極管,而復雜的輸出設備可能是一個長款數米的超大屏幕。
?嵌入式系統的輸入/輸出設備的選擇要根據實際需要,再面向對象的開發中,可以把輸入設備和輸出設備進行分類并定義成統一的描述接口,再分析和設計中按組件或不見得方式使用,而在實現時再替代從最終也需要的設備。
4.設備擴展接口
?由于目前的嵌入式系統功能越來越復雜,所處理的數據量也非常龐大,因此這種系統就需要有很大的存儲容量。
?個人計算機存儲卡國際協會PCMCIA是為了開發出低功耗、小體積、高擴展性的一個卡片型工業存儲標準擴展所設立的協會,它負責對廣泛使用的存儲卡和輸入/輸出卡的外形規范、電氣特性、信號定義進行管理。根據這些規范和定義而生產出來的外形如信用卡大小的產品叫做PCMICA卡,也稱為PC-Card。按照卡的介質分為Flash、SRAM、I/O卡和硬盤卡。
5.電源及輔組設備
?電源設計也是嵌入式系統硬件設計的一個重要環節。從系統的保險性方面考慮,電源設計的缺陷是產生系統干擾的絕大部分原因;從功耗方面考慮,電源是各類手持系統的主要設計指標;從重要和體積上考慮,電源可能是系統重要的主要來源。因此,目前有關嵌入式系統電源提供方式、電源電壓、各類省電模式等已成為電源設計的重要設計指標。
?嵌入式系統尤其是手持式系統力求外觀小型化,質量輕以及電源使用壽命長,例如手機或PDA。在便攜式嵌入式系統的應用中,功耗和電源裝置等輔助設備是必須要考慮的。
7.2.3 硬件原理圖的建立
?當確立了系統中要使用的外圍電路及輸入/輸出接口電路和外部設備以后,就要通過硬件原理圖把所有部件連接起來。在部件連接的過程中需要注意相互連接的部件的電氣特性一定要正確。例如,圖7.2中部件A的輸出邏輯電平位0~3V,高電平輸出電流位0.4mA,如B的輸入高電平需要保證在4V以上(如CMOS器件),或保證輸入高電平電流在5mA,(如發光二極管),這是雖然兩端邏輯關系正確,但電氣關系不匹配,這時就要在兩者這件加入一個驅動元器件,或改變電路邏輯才有可能使系統正常工作。
?有時即使邏輯和電氣關系都正確,在通信連接中時序和協議關系不對也是不能達到連接目的的。在硬件連接層面,考慮的是最基本二時序和協議關系,如同步還是異步,輸出波特率與輸入波特率是否有共同的窗口等,而對于更高一層的鏈路關系,則是有基本軟件鏈路協議保證的。
?電路原理圖繪制工具通常采用專用電路輔組設計軟件(如protel或tangl等)。原理圖的建立一般要保護哦設置原理圖設計環境、放置元件、原理圖布線,編譯與調整元件屬性、檢查原理圖、生成網絡表和打印輸出原理圖幾個步驟。
7.2.4 PCB圖的建立
?當系統硬件原理圖設計完成以后,最終還要把所選定的電路元器件以其物理存在方式固定在印刷電路板PCB上。
?電路原理圖到PCB圖的轉化過程可以有人工布線和自動布線兩種方式。
?一般電路輔組開發工具都具備仿真功能。較好的工具甚至還可以對電路進行瞬態分析、噪聲分析等動態特征的分析驗證。
7.2.5 電路板的組裝
?電路板圖設計好后,一般要交由專業電路板制造商完成電路板的制作工作。當制作好的電路板拿回以后,就可以按照最初的設計往電路板上組裝元器件。元器件的焊接,尤其是對密間距表面安裝部件的焊接,可以通過專業焊接工具或到專業從事焊接的商業組織進行。對于試驗階段制品或間距較大的元器件也可以自行焊接,但一般焊接技術要求較高,初學者使很難達到要求的。
7.2.6 電路板的調試
?在調試的初級階段一般要進行單個元器件的行為功能確認。一般要經過加電觀察,通過簡單的測試程序發送需要的測試向量,并通過適當的手段(示波器、邏輯分析儀、各類顯示或聲音輸出等)觀察輸出。
?硬件系統調試時應最先調試輸出或顯示部分。因為當一個系統輸出不能正常工作時,系統就真的是一個“黑匣子”了。
?電路板測試一般要針對具體電路邏輯編制測試程序。在編制測試程序時要注意到硬件運行的所有情況,一般來說測試程序所能運行的硬件電路功能要大于系統運行時所實際使用的功能。另外測試部件的工作性能指標返回也通常大于實際使用的范圍,如某一UART部件測試的工作頻率范圍可能時0.3~115.2kbps,而實際使用中僅使用19.2kbps一個點。
7.3 嵌入式系統硬件驅動程序
?硬件電路板測試程序時系統硬件驅動程序的基礎。
7.3.1 嵌入式系統硬件驅動程序
?從操作系統的視角看待對系統硬件功能的操作,就稱鄰接操作系統并能驅動硬件的程序為硬件設備驅動程序。要實現微處理器與外設的通信,應用程序要通過操作系統將具體的I/O任務下達給外設,外設要將其完成任務情況報告給調用該驅動的操作系統,再由操作報告給應用程序。
?設備驅動程序的確立,使得為應用程序提供統一使用的外設界面而不必考慮外設輸入/輸出的實現細節成為可能,因而構成了層次式系統結構。對于中小型操作系統(如uc/os),通常采用開放式分層體系結構,即應用程序和操作系統可以不受限制地訪問硬件設備甚至是直接操作I/O地址。
嵌入式系統中硬件設備驅動程序的所屬是模糊的,他們既可以屬于操作系統,如在具有大型操作系統的應用中,也可以不屬于操作系統,如在小型操作系統甚至沒有操作系統的應用中。通常可以把介于硬件和操作系統之間的這一部分稱為硬件抽象層HAL。
 由于嵌入式系統中所使用的硬件通常都只針對特定應用而選擇的,因此極少存在標準驅動程序的情況。
7.3.2 嵌入式系統的啟動過程
?固件是底層的嵌入式軟件,它提供硬件和應用程序/操作系統層軟件之間的接口。固件存儲在ROM里,嵌入式硬件系統一上點就立即執行。在完成系統初始化以后,固件可以繼續保持活動狀態,以提供某些基本的系統操作支持。固件的一個基本作用是提供一個啟動程序,啟動程序是一個用來引導操作系統或應用程序到硬件目標平臺上的小應用程序,他在操作系統或應用程序執行后便立即退出。
7.3.3 嵌入式系統分層設備驅動
?嵌入式系統的軟件在邏輯上是層次的。在對待設備驅動的問題上可以有封閉式分層設備驅動和開放式分層設備驅動兩種。
?封閉式分層設備驅動通常把設備驅動程序看成是內核的一部分。但由于設備種類繁多,相應地,設備驅動程序的代碼也就會數量龐大。而且開發人員也比較雜亂。因此,SVR4提出了設備-驅動程序接口/設備驅動程序-訥河解耦DDI/DKI規范。
?開放式分層設備驅動,它主要是不把硬件驅動程序看成是操作系統的一部分。操作系統僅提供內核任務調度和必要的系統服務(如信號量、任務見通信等),在操作系統需要硬件設備支持時,僅提供函數編寫規范或要求(如us/os-ii要求函數具有可重入性)。這時把硬件設備驅動程序統一安排在HAL層中,而HAL層實際上是作為獨立于操作系統層而獨立存在的。
7.4 實時操作系統在嵌入式系統實現中的應用
?由于嵌入式操作系統不能像通用操作系統那樣在標準的資源上安裝,因此在實際用用他們到一個具體的目標系統上式需要進行移植。所謂移植,就是要針對特定的微處理器開發一些底層的,尤其是與微處理器內部及短期操作相關的部分代碼。按照面向對象的觀點,實時操作系統僅是嵌入式系統軟件的一個組件,而其他的附加功能部件則是一些可選的組件。如圖7.3所示。
?這里僅以uC/OS-II一直到ARM微處理器為例來說明實時操作系統在特定應用系統中的應用原理。
7.4.1 移植的條件
?大部分代碼使用C語言編寫的,但在把它具體應用到某種微處理器為核心的目標機上時,仍然需要用C語言和匯編語言編寫一些與處理器相關的代碼。這首先時因為uC/OS-II的事先并不知道所使用的微處理器內部寄存器的位數和數量,并且C語言不具備直接操作CPU寄存器的能力。因此它沒有辦法把這些寄存器壓入堆棧或從堆棧取出再還原給他們,而這些也恰恰是操作系統進行任務調度和終端管理的必須的操作。
7.4.2 移植的內容
1. 基本配置和定義-定義OS_CPU.H文件
OS_CPU.H文件中。需要做的事情如下
-
定義與編譯器相關的數據類型。
?
-
定義打開和關閉終端的宏
-
定義堆棧增長方向
 OS_STK_GROWTH為0表示堆棧從下往上增長。
2.再OS_CPU_C.C中編寫相關C語言函數
3.在OS_CPU_A.ASM中編寫相關底層匯編函數
4.移植后的測試
?應該編寫一個簡單的多任務應用程序,按照uC/OS-II的main()函數結構要求建立這些簡單的任務。當簡單的多任務程序運行成功時,才能證明移植工作的完成。以后的編碼主要時應用程序的編碼和確立如何使用uC/OS-II中的相關函數建立多任務之間的通信或同步關系。
7.5 嵌入式系統的軟件實現
1.開發環境的建立
?在進入實際開發程序之前,要先建立交叉開發環境。
?按照發布的形式,交叉開發環境主要分為開放和商用兩種。開放式如gcc,商用如Arm Developer Suite.
?按照使用方式,主要分為使用Makefile和集成開發環境IDE兩種。
?對開發環境有了必要的了解后,就可以根據要開發的目標配置開發環境并建立項目。
?當嵌入式系統升級時,要考慮到跨平臺問題,因為升級到目標系統的微處理器經常會與原來的系統不同。這屬于軟件復用,這時面向對象技術的基本優點之一。關于增加可移植性的方法,如盡量使用高級語言,把需要改變的部分集中到一起,采用面向對象技術等。
2.源文件編輯
?一個具有一定規模的嵌入式項目程序往往時多模塊的源程序。另外,每個模塊的開發語言也是不同的,開發時要注意模塊之間的接口定義和相互調用連接關系。
&emsp:啟動代碼、硬件初始化代碼通常要用匯編語言編寫。因為這樣可以發揮匯編語言短小精悍的優勢,可以提高代碼的執行效率。
3.交叉編譯
?編譯器的重要工作時將用高級語言編寫的源代碼翻譯成在特定類型微處理器上的可執行代碼。編譯器通常只針對一個源程序文件進行語法檢查和翻譯。因此在一個模塊中調用其他模塊的函數,使用其他模塊的數據結構和全局變量之前都必須聲明。
?通常目標代碼是不能執行的,不過可以通過目標代碼體哦那個有用信息轉化成可執行代碼。現在的目標代碼通常有兩類:COFF與ELF.有了標準的目標文件格式,不同的開發商提供的開發工具就可以實現相互連接和操作。
4.匯編
?匯編器的任務是將符號級的匯編語言翻譯成稱為目標代碼的指令位級表示。匯編完成匯編語言到二進制代碼的轉換。匯編過程通常要經過兩次掃描過程。在第一次掃描中,使用程序位置計數器(PLC)檢查每一條指令的位置,掃描整個模塊程序并標記每個標號的PLC的值。在第二次掃描中,把所有匯編代碼中的相對地址加入到指令的相對偏移量位域。
5.鏈接
?鏈接器通常包括定位器。鏈接器是用來將不同的模塊連接成目標文件;定位器允許將代碼和數據放置在目標處理器的指定內存空間。
?鏈接程序分為兩個階段:第一階段,決定每一個目標文件開始的絕對弟子,目標文件裝載的順序由用戶給定,給出文件裝載順序和每一個目標文件的長度后,容易計算出每個文件的其實地址;第二階段,裝載程序把所有目標文件符號表合并為i單獨的一個大表,然后把相對地址變為絕對地址。
?定位時,要根據目標系統中實際存在的存儲器地址,根據輸入的目標文件順序以段為單位將他們一個接一個地拼接起來。除了按目標地址拼裝以外,在定位過程中還完成了兩個任務:一是生成最終的符號表;二是對代碼段中的某些位域進行修改,所有需要修改的地方都有編譯器生成的重定位表給出。
6.下載
?下載就是把鏈接得到的二進制文件裝載到目標系統指定的內存中的過程。
7.調試
7.6 嵌入式系統的測試與調試
?在主機上開發并編譯完成的可執行目標代碼,經過主機與目標機之間的某種(串行接口、網絡接口、USB接口、JTAG接口等)下載方式下載到嵌入式系統中,或者固化在嵌入式系統只讀存儲器中。
?首先,如何在主機上控制目標機上的程序運行。這個問題可以通過目標機上運行調試代理的方式解決。調試代理負責與主機上的調試程序通信,解釋調試命令并控制目標程序的運行(繼續運行、單步運行、斷點設置等)。
?其次,如何模擬目標系統的輸入/輸出。
7.6.1 調試工具和方法
?在PC機或工作站上,大量軟件調試都可以編譯并模擬執行代碼來完成。但在某些情況下系統最終不可避免地要求直接在嵌入式目標硬件上運行代碼。
?在大多數評測主板上,串行端口是最重要的調試工具之一。
?另一個調試工具是斷點。在程序到達斷點時,調試器會自動進入到監控狀態。在監控狀態,用戶可以觀察或修改CPU急促請你、程序變量值、存儲器單元值甚至輸入/輸出寄存器。
&emsp:目前嵌入式系統斷點由硬件斷點和軟件斷點兩種形式。硬件斷點是指在微處理器內部配置硬件比較器(如ARM EmbeddedICD的嵌入式跟蹤宏單元).軟件斷電時通過代碼替換來完成的。
?硬件斷點可以在ROM或RAM中隨意設置,但數量有限。
1. LED作為調試設備
?可以利用LED在代碼進入特定程序顯示錯誤狀體,或顯示空閑時的活動等等。
2.電路內部仿真
?當軟件工具不足以調試系統時,硬件輔助可以幫助查看系統運行時到底發生了什么。
3.邏輯分析儀
?典型的邏輯分析儀能夠以兩種模式獲取數據:狀態模式和定時模式。在定時模式中,采用使用一個內部時鐘,這個時鐘足夠快地在每個被測系統時鐘階段抽取幾個樣本。狀態模式則理工被測系統時鐘控制采樣,所以它每個時鐘周期采樣一個信號。
4.CPU模擬
?在嵌入式系統開發中,經常會遇到軟件已經開發完成,但硬件還沒有準備好的情況。雖然木便有了開發平臺、開發板等,完全脫離硬件而在開發主機上的軟件調試時極為有用的。如ARM的ARMulator。大部分CPU模擬器不能報告執行一段代碼所使用的機器周期數,也不對總線和I/O設備的活動模擬。通常CPU模擬器能夠模擬目標系統CPU的核心代碼計算,也提供較強的可視性調試界面。
5.軟/硬件協同認證
7.6.2 制造測試
?保證設計正確并不夠,還必須保證系統被無誤地制造出來。制造測試的目的時確保咋系統生產時的錯誤不會被帶入到產品中來。即使設計時完美的,在系統每個副本的制造中也由潛在性的錯誤而使之被剔出流水線。設計出一個完美的系統之后再去解決在生產者咋樣測試他們,這通常不會是一個好主意。當制造復雜系統時,有必要在設計中考慮制造測試。
?制造一個被快速、測試地測試過的系統,通常需要仔細的設計,以確保系統能用許多顯示制造錯誤結果的方式進行檢查。
1.故障模型
?在一個產品測試中給定需要測試的所有可能的故障情況,就能生產一系列測試來檢查每個故障對應的那些故障結果。
2.組合網絡監測
?當邏輯電路的輸出僅取決于當時的輸入時,稱這類電路為組合邏輯電路。
3.時序電路的測試
?當邏輯電路的輸出不僅依賴于當時的輸入而且也依賴于過去的歷史時,這類電路為時序邏輯電路。
4.電路模塊的掃描鏈
?降低順序測試的復雜性的一個方法是使用掃描鏈。在掃描模式,它像一個允許寄存器的目前狀態移出并且新狀態被移入的移位寄存器。
5.邊界掃描
?邊界掃描時芯片的標準接口,它被稱為JTAG.JTAG標準為加入到芯片引腳的掃描鏈描述了配置和控制順序。
&emsp:邊界掃描用于檢測微處理器基本部分時非常有用的。一旦微處理器的基本部分能夠正常工作,就可以通過它運行各類診斷測試程序來檢查系統的外圍電路。
總結
以上是生活随笔為你收集整理的面向对象嵌入式系统开发7-嵌入式系统的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (三)JMockit API:@Mock
- 下一篇: 为什么使用Stelnet与sftp协议,