嵌入式軟體
出自 MBA智库百科(https://wiki.mbalib.com/)
目錄 |
什麼是嵌入式軟體[1]
嵌入式軟體是嵌入在硬體中的操作系統和開發工具軟體,它在產業中的關聯關係體現為:晶元設計製造,嵌入式系統軟體,嵌入式電子設備開發、製造。
嵌入式軟體的特點[1]
(1)嵌入式軟體具有獨特的實用性。嵌入式軟體是為嵌入式系統服務的,這就要求它與外部硬體和設備聯繫緊密。嵌入式系統以應用為中心,嵌入式軟體是根據應用需求定向開發,因此每種嵌入式軟體都有自己獨特的應用性和實用價值。
(2)嵌入式軟體應有靈活的適用性。嵌入式軟體通常可以認為是一種模塊化軟體,它能非常方便靈活的運用到各種嵌入式系統中,而不能破壞或更改原有的系統特性和功能。使用靈活,配置優化,升級更換靈活方便。
(3)嵌入式軟體具有較高的安全性。為單一嵌入式設備開發病毒和木馬比較得不償失,開發難度也較大。
(4)嵌入式軟體具有可靠的小巧性。嵌入式軟體嵌入在ROM、RAM和/或FI。ASH存儲器中,而不是存貯於磁碟等載體中。要求軟體小巧,占用資源少,軟體代碼緊湊,可靠。
嵌入式軟體的分類[2]
按軟體實現功能劃分,嵌入式軟體通常可以分為以下3大類。
1.嵌入式應用軟體
這類軟體是專門針對特定應用領域的電腦軟體。嵌入式應用軟體和普通應用軟體有一定的區別,它不僅要求其準確性、安全性和穩定性等方面能夠滿足實際應用的需要,還要儘可能地對其進行優化,以減少對系統資源的消耗,降低硬體成本。
2.嵌入式系統軟體
控制和管理嵌入式系統資源,為嵌入式應用軟體提供各種軟體支持,如設備驅動程式、嵌入式操作系統、嵌入式中間件(協議層軟體)等。
3.嵌入式支撐軟體
幫助和支持軟體開發的工具軟體,如嵌入式移動資料庫、嵌入式Web、SNMP代理、系統分析設計工具、線上模擬工具、交叉編譯器、源程式模擬器和工程管理工具等。
需要明確的是,系統軟體和應用軟體都是運行在嵌入式硬體設備上的,即最終運行
在目標平臺上,而支撐軟體大部分都是運行在開發平臺(通常是運行Windows或者Linux操作系統的PC)上,為開發人員提供各種應用開發庫、板級支持包(Board Support Packet,BSP)、標準的軟體構件以及開發、調試的幫助軟體。
嵌入式軟體的體繫結構[3]
1.無操作系統的情形
早期的嵌入式系統硬體配置比較低,主要應用在控制領域,基本不需要系統軟體的支持。所以早期嵌入式軟體的設計以應用為核心,應用軟體直接建立在硬體上,規模也很小,沒有專門的操作系統,基本上屬於硬體的附屬品。無操作系統嵌入式軟體的具體實現方式主要有兩種:迴圈輪換和前後臺系統。
1)迴圈輪換
迴圈輪換方式的基本思路是:把系統的功能分解為若幹個不同的任務,然後把它們包含在一個永不結束的迴圈語句當中,按照順序逐一執行。當執行完一輪迴圈後,又回到迴圈體的開頭重新執行。
迴圈輪換方式的優點是簡單、直觀、開銷小、可預測。軟體的開發就是一個典型的基於過程的程式設計問題,可以按照自頂向下、逐步求精的方式,將系統要完成的功能逐級劃分成若幹個小的功能模塊,像搭積木一樣搭起來。由於整個系統只有一條執行流程和一個地址空間,不需要任務之間的調度和切換,因此系統的管理開銷很少。而且由於程式的代碼固定,函數之間的調用關係也是明確的,故整個系統的執行過程可預測,這對於一些實時控制系統來說非常重要。
迴圈輪換方式的缺點是過於簡單,所有的代碼都必須按部就班地順序執行,無法處理非同步事件,缺乏並行處理的能力。而在現實世界當中,事件都是非同步並行出現的,而且有些事件比較緊急,當它們發生時,必須馬上進行處理,不能等到下一輪迴圈。另外,這種方案沒有硬體上的時間控制機制,無法實現定時功能。
2)前後臺系統
前後臺系統就是在迴圈輪換方式的基礎上,增加了中斷處理功能。中斷服務程式構成前臺程式,負責處理非同步事件,稱為事件處理級程式。後臺程式一般是一個無限的迴圈,負責掌管整個嵌入式系統軟、硬體資源的分配、管理以及任務調度,是一個系統管理調度程式,稱為任務級程式。在系統運行時,後臺程式會檢查每個任務是否具備運行條件,通過一定的調度演算法來完成相應的操作。而對於實時性要求特別嚴格的操作通常由中斷來完成。為了提高系統性能,大多數中斷服務程式只做一些最基本的操作,其餘的事情會延遲到後臺程式去完成,這樣就不會因為在中斷服務程式中耽誤太長時間而影響到後續和其他中斷。實際上,前後臺系統的實時性比預計要差。這是因為前後臺系統認為所有任務具有相同的優先順序別,即是平等的,而且任務的執行又是通過先進先出的隊列排隊,因而對那些實時性要求很高的任務不能立刻進行處理。
2.有操作系統的情形
利用操作系統,應用程式的開發不是直接面對嵌入式硬體設備,而是在操作系統的基礎上編寫,易於實現功能複雜、系統龐大的應用。
這種方式可以提高系統的可靠性,當應用程式產生異常、出錯,甚至死迴圈時,在嵌人式操作系統的管理下,只會引起系統中的某一個進程被破壞,可通過系統的監控進程對其進行修複。在嵌入式操作系統環境下,開發應用程式具有很大的靈活性,操作系統本身可以裁減外設,相關應用也可以配置,軟體可以在不同的應用環境、處理器晶元之間移植。同時,一個複雜的應用程式可分解為多個任務模塊,每個任務模塊的調試、修改幾乎不影響其他模塊,任務模塊可復用,大大提高了系統的開發效率。
圖1說明瞭嵌入式軟體的體繫結構。由圖可見,嵌入式硬體之上依次為設備驅動層、操作系統層、中間件層和應用軟體層。設備驅動層負責與硬體直接打交道,實現對A/D轉換、計數器、程式控制信號發生器等硬體的操作,併為上層軟體提供所需的驅動支持。操作系統層包括基本部分和擴展部分。前者是操作系統的核心,負責整個系統的任務調度、存儲管理、時鐘管理和中斷管理等功能,這一部分是基礎和必備的。後者是系統為用戶提供的一些擴展功能,包括網路、文件系統、圖形用戶界面GUI、資料庫等,這一部分的內容可以根據系統的需要來進行裁減。中間件層為應用軟體層提供一些對操作系統的便捷服務和廣泛使用的庫函數,如常用的數據運算函數、數據格式的變換函數以及數據表格圖線的繪製函數等。應用軟體層則是實現具體應用功能的用戶程式,根據不同的測量任務,應用程式以合適的形式表示出測量的結果,如類似示波器的波形顯示或以頻域譜線的形式顯示FFT分析的結果等。嵌入式軟體的開發[4]
嵌入式軟體開發的過程主要包括三個步驟:生成、調試和固化運行。
1.嵌入式軟體的生成
嵌入式軟體的生成主要是在宿主機上進行,利用各種工具完成對應用程式的編輯、交叉編譯和鏈接工作,生成可供調試或固化的目標程式。主要包括三個過程(如圖1所示):·源代碼程式的編寫;
·編譯成各個目標模塊;
·鏈接成可供下載調試或固化的目標程式。
2.嵌入式軟體的調試
嵌入式軟體的調試是通過交叉調試器來完成的,調試完成後還需進行必要的測試工作。交叉調試器是指調試程式和被調試程式運行在不同機器上的調試器,調試器通過某種方式能控制目標機上被調試程式的運行方式,通過調試器能查看和修改目標機上的記憶體、寄存器以及被調試程式中的變數等。主要的交叉調試方式有以下幾種。
(1)Crash and Burn
Crash and Burn是最早的嵌入式應用軟體調試方法,也是最簡單的。這種方式主要靠程式員的主觀判斷。圖3是這種方式的示意圖。(2)ROM Monitor
ROM Monitor是被固化且運行在目標機上的一段程式,負責監控目標機上被調試程式的運行,與宿主機端的調試器一起完成對應用程式的調試。調試器與ROM Monitor之間的通信遵循遠程調試協議。這種調試方式如圖4所示。這種方式的主要優點是:
·簡單、方便;
·可擴展性強,可支持許多高級調試功能;
·成本低廉,不需專門的調試硬體支持;
·幾乎所有的交叉調試器都支持這種方式。
缺點是:
·Debug Monitor需要用Crashand Burn方法開發;
·當ROM Monitor占用CPU時,應用程式不響應外部的中斷,因此不便調試有時間特性的程式;
·ROM Monitor要占用目標機一定數量的資源,如CPU、RAM、ROM和通信設備等資源;
·調試環境不同於實際目標環境。
(3)ROM Emulator
ROM Emulator是一種用於替代目標機上的ROM晶元的設備,即ROM模擬器。利用這種設備,目標機可以沒有ROM晶元,但目標機的CPU可以讀取ROM Emulator設備上ROM晶元的內容:ROM Emulator設備上的ROM晶元的地址可以實時地映射到目標機的ROM地址空間,從而模擬(Emulation)目標機的ROM。
ROM Emulator的調試方式是一種不完全的調試方式:ROM Emulator設備只是為目標機提供ROM晶元及在Target和Host間建立一條高速的通信通道,因此它經常和前面兩種調試方式結合起來形成一種完備的調試方式。ROM Emulator的典型應用就是和ROM Monitor的調試方式相結合。
這種調試方式的優點是:保證調試版本與最終發佈版本一致。缺點是:目標機必須能支持外部ROM存儲空間,而且由於其通常要和ROM Monitor配合使用,因此它擁有ROM Monitor的缺點。
(4)ICE
ICE(In—Circuit Emulator)是一種用於替代目標機上CPU的設備,即線上模擬器。它比一般的CPU有更多的引出線,能夠將內部的信號輸出到被控制的目標機。ICE上的Memory也可以被映射到用戶的程式空間,這樣即使在目標機不存在的情形下也可以進行代碼的調試。
連接ICE和目標機時,一般是將目標機的CPU取下,而將ICE的CPU引出線接到目標機的CPU插槽。用ICE進行調試時,在Host端運行的調試器通過ICE來控制目標機上運行的程式。
這種方式能夠同時支持軟體斷點和硬體斷點的設置,設置各種複雜的斷點和觸發器,實時跟蹤目標程式的運行,並可實現選擇性的跟蹤。因而,特別適用於調試設備驅動程式、實時的應用系統,適合對硬體進行功能和性能的測試。主要缺點是價格太昂貴,不利於團隊開發,所仿CPU有限。
(5)OCD
OCD(On Chip Debugging)是CPU晶元提供的一種調試功能(片上調試),可以認為是一種廉價的ICE功能:OCD的價格只有ICE的20%,但提供了ICE80%的功能。OCD調試結構如圖5所示。這種調試方式的優點是:
·不占用目標機的資源;
·調試環境和最終的程式運行環境基本一致;
·支持軟硬斷點、Trace功能;
·精確計量程式的執行時間;
·提供時序分析功能。
缺點是:
·調試的實時性不如ICE;
·不支持非干擾調試查詢;
·CPU必需具有0CD功能。
OCD的實現方式主要有BDM(Background Debugging Mode)、JTAG(Joint Test Access Group)、ONCE(On Chip Emulation)等幾種。其中,JTAG是主流方式。
3.嵌入式軟體的固化
固化運行是先用一定的工具將程式固化到目標機上,然後啟動目標機,在沒有任何工具干預的情況下程式能自動地啟動運行。根據目標程式的不同,固化的方式可能不一樣。比如,Bootloader的固化一般採用JTAG介面,而內核、根文件系統和應用程式適用於速度更快的網口。