登錄

嵌入式軟件

百科 > 計算機(jī) > 嵌入式軟件

1.什么是嵌入式軟件[1]

  嵌入式軟件是嵌入在硬件中的操作系統(tǒng)和開發(fā)工具軟件,它在產(chǎn)業(yè)中的關(guān)聯(lián)關(guān)系體現(xiàn)為:芯片設(shè)計制造,嵌入式系統(tǒng)軟件,嵌入式電子設(shè)備開發(fā)、制造。

2.嵌入式軟件的特點(diǎn)[1]

  (1)嵌入式軟件具有獨(dú)特的實用性。嵌入式軟件是為嵌入式系統(tǒng)服務(wù)的,這就要求它與外部硬件和設(shè)備聯(lián)系緊密。嵌入式系統(tǒng)以應(yīng)用為中心,嵌入式軟件是根據(jù)應(yīng)用需求定向開發(fā),因此每種嵌入式軟件都有自己獨(dú)特的應(yīng)用性和實用價值。

  (2)嵌入式軟件應(yīng)有靈活的適用性。嵌入式軟件通常可以認(rèn)為是一種模塊化軟件,它能非常方便靈活的運(yùn)用到各種嵌入式系統(tǒng)中,而不能破壞或更改原有的系統(tǒng)特性和功能。使用靈活,配置優(yōu)化,升級更換靈活方便。

  (3)嵌入式軟件具有較高的安全性。為單一嵌入式設(shè)備開發(fā)病毒和木馬比較得不償失,開發(fā)難度也較大。

  (4)嵌入式軟件具有可靠的小巧性。嵌入式軟件嵌入在ROM、RAM和/或FI。ASH存儲器中,而不是存貯于磁盤等載體中。要求軟件小巧,占用資源少,軟件代碼緊湊,可靠。

3.嵌入式軟件的分類[2]

  按軟件實現(xiàn)功能劃分,嵌入式軟件通常可以分為以下3大類。

  1.嵌入式應(yīng)用軟件

  這類軟件是專門針對特定應(yīng)用領(lǐng)域的計算機(jī)軟件。嵌入式應(yīng)用軟件和普通應(yīng)用軟件有一定的區(qū)別,它不僅要求其準(zhǔn)確性、安全性和穩(wěn)定性等方面能夠滿足實際應(yīng)用的需要,還要盡可能地對其進(jìn)行優(yōu)化,以減少對系統(tǒng)資源的消耗,降低硬件成本。

  2.嵌入式系統(tǒng)軟件

  控制和管理嵌入式系統(tǒng)資源,為嵌入式應(yīng)用軟件提供各種軟件支持,如設(shè)備驅(qū)動程序、嵌入式操作系統(tǒng)、嵌入式中間件(協(xié)議層軟件)等。

  3.嵌入式支撐軟件

  幫助和支持軟件開發(fā)的工具軟件,如嵌入式移動數(shù)據(jù)庫、嵌入式Web、SNMP代理、系統(tǒng)分析設(shè)計工具、在線仿真工具、交叉編譯器、源程序模擬器和工程管理工具等。

  需要明確的是,系統(tǒng)軟件應(yīng)用軟件都是運(yùn)行在嵌入式硬件設(shè)備上的,即最終運(yùn)行

  在目標(biāo)平臺上,而支撐軟件大部分都是運(yùn)行在開發(fā)平臺(通常是運(yùn)行Windows或者Linux操作系統(tǒng)的PC)上,為開發(fā)人員提供各種應(yīng)用開發(fā)庫、板級支持包(Board Support Packet,BSP)、標(biāo)準(zhǔn)軟件構(gòu)件以及開發(fā)、調(diào)試的幫助軟件。

4.嵌入式軟件的體系結(jié)構(gòu)[3]

  1.無操作系統(tǒng)的情形

  早期的嵌入式系統(tǒng)硬件配置比較低,主要應(yīng)用在控制領(lǐng)域,基本不需要系統(tǒng)軟件的支持。所以早期嵌入式軟件的設(shè)計以應(yīng)用為核心,應(yīng)用軟件直接建立在硬件上,規(guī)模也很小,沒有專門的操作系統(tǒng),基本上屬于硬件的附屬品。無操作系統(tǒng)嵌入式軟件的具體實現(xiàn)方式主要有兩種:循環(huán)輪換和前后臺系統(tǒng)。

  1)循環(huán)輪換

  循環(huán)輪換方式的基本思路是:把系統(tǒng)的功能分解為若干個不同的任務(wù),然后把它們包含在一個永不結(jié)束的循環(huán)語句當(dāng)中,按照順序逐一執(zhí)行。當(dāng)執(zhí)行完一輪循環(huán)后,又回到循環(huán)體的開頭重新執(zhí)行。

  循環(huán)輪換方式的優(yōu)點(diǎn)是簡單、直觀、開銷小、可預(yù)測。軟件的開發(fā)就是一個典型的基于過程的程序設(shè)計問題,可以按照自頂向下、逐步求精的方式,將系統(tǒng)要完成的功能逐級劃分成若干個小的功能模塊,像搭積木一樣搭起來。由于整個系統(tǒng)只有一條執(zhí)行流程和一個地址空間,不需要任務(wù)之間的調(diào)度和切換,因此系統(tǒng)的管理開銷很少。而且由于程序的代碼固定,函數(shù)之間的調(diào)用關(guān)系也是明確的,故整個系統(tǒng)的執(zhí)行過程可預(yù)測,這對于一些實時控制系統(tǒng)來說非常重要。

  循環(huán)輪換方式的缺點(diǎn)是過于簡單,所有的代碼都必須按部就班地順序執(zhí)行,無法處理異步事件,缺乏并行處理的能力。而在現(xiàn)實世界當(dāng)中,事件都是異步并行出現(xiàn)的,而且有些事件比較緊急,當(dāng)它們發(fā)生時,必須馬上進(jìn)行處理,不能等到下一輪循環(huán)。另外,這種方案沒有硬件上的時間控制機(jī)制,無法實現(xiàn)定時功能。

  2)前后臺系統(tǒng)

  前后臺系統(tǒng)就是在循環(huán)輪換方式的基礎(chǔ)上,增加了中斷處理功能。中斷服務(wù)程序構(gòu)成前臺程序,負(fù)責(zé)處理異步事件,稱為事件處理級程序。后臺程序一般是一個無限的循環(huán),負(fù)責(zé)掌管整個嵌入式系統(tǒng)軟、硬件資源的分配管理以及任務(wù)調(diào)度,是一個系統(tǒng)管理調(diào)度程序,稱為任務(wù)級程序。在系統(tǒng)運(yùn)行時,后臺程序會檢查每個任務(wù)是否具備運(yùn)行條件,通過一定的調(diào)度算法來完成相應(yīng)的操作。而對于實時性要求特別嚴(yán)格的操作通常由中斷來完成。為了提高系統(tǒng)性能,大多數(shù)中斷服務(wù)程序只做一些最基本的操作,其余的事情會延遲到后臺程序去完成,這樣就不會因為在中斷服務(wù)程序中耽誤太長時間而影響到后續(xù)和其他中斷。實際上,前后臺系統(tǒng)的實時性比預(yù)計要差。這是因為前后臺系統(tǒng)認(rèn)為所有任務(wù)具有相同的優(yōu)先級別,即是平等的,而且任務(wù)的執(zhí)行又是通過先進(jìn)先出的隊列排隊,因而對那些實時性要求很高的任務(wù)不能立刻進(jìn)行處理。

  2.有操作系統(tǒng)的情形

  利用操作系統(tǒng),應(yīng)用程序的開發(fā)不是直接面對嵌入式硬件設(shè)備,而是在操作系統(tǒng)的基礎(chǔ)上編寫,易于實現(xiàn)功能復(fù)雜、系統(tǒng)龐大的應(yīng)用。

  這種方式可以提高系統(tǒng)的可靠性,當(dāng)應(yīng)用程序產(chǎn)生異常、出錯,甚至死循環(huán)時,在嵌人式操作系統(tǒng)的管理下,只會引起系統(tǒng)中的某一個進(jìn)程被破壞,可通過系統(tǒng)的監(jiān)控進(jìn)程對其進(jìn)行修復(fù)。在嵌入式操作系統(tǒng)環(huán)境下,開發(fā)應(yīng)用程序具有很大的靈活性,操作系統(tǒng)本身可以裁減外設(shè),相關(guān)應(yīng)用也可以配置,軟件可以在不同的應(yīng)用環(huán)境、處理器芯片之間移植。同時,一個復(fù)雜的應(yīng)用程序可分解為多個任務(wù)模塊,每個任務(wù)模塊的調(diào)試、修改幾乎不影響其他模塊,任務(wù)模塊可復(fù)用,大大提高了系統(tǒng)的開發(fā)效率。

  圖1說明了嵌入式軟件的體系結(jié)構(gòu)。由圖可見,嵌入式硬件之上依次為設(shè)備驅(qū)動層、操作系統(tǒng)層、中間件層和應(yīng)用軟件層。設(shè)備驅(qū)動層負(fù)責(zé)與硬件直接打交道,實現(xiàn)對A/D轉(zhuǎn)換、計數(shù)器、程控信號發(fā)生器等硬件的操作,并為上層軟件提供所需的驅(qū)動支持。操作系統(tǒng)層包括基本部分和擴(kuò)展部分。前者是操作系統(tǒng)的核心,負(fù)責(zé)整個系統(tǒng)的任務(wù)調(diào)度、存儲管理、時鐘管理和中斷管理等功能,這一部分是基礎(chǔ)和必備的。后者是系統(tǒng)為用戶提供的一些擴(kuò)展功能,包括網(wǎng)絡(luò)、文件系統(tǒng)、圖形用戶界面GUI、數(shù)據(jù)庫等,這一部分的內(nèi)容可以根據(jù)系統(tǒng)的需要來進(jìn)行裁減。中間件層為應(yīng)用軟件層提供一些對操作系統(tǒng)的便捷服務(wù)和廣泛使用的庫函數(shù),如常用的數(shù)據(jù)運(yùn)算函數(shù)、數(shù)據(jù)格式的變換函數(shù)以及數(shù)據(jù)表格圖線的繪制函數(shù)等。應(yīng)用軟件層則是實現(xiàn)具體應(yīng)用功能的用戶程序,根據(jù)不同的測量任務(wù),應(yīng)用程序以合適的形式表示出測量的結(jié)果,如類似示波器的波形顯示或以頻域譜線的形式顯示FFT分析的結(jié)果等。
Image:嵌入式軟件的體系結(jié)構(gòu).jpg

5.嵌入式軟件的開發(fā)[4]

  嵌入式軟件開發(fā)的過程主要包括三個步驟:生成、調(diào)試和固化運(yùn)行。

  1.嵌入式軟件的生成

  嵌入式軟件的生成主要是在宿主機(jī)上進(jìn)行,利用各種工具完成對應(yīng)用程序的編輯、交叉編譯和鏈接工作,生成可供調(diào)試或固化的目標(biāo)程序。主要包括三個過程(如圖1所示):
Image:嵌入式軟件的生成.jpg

  ·源代碼程序的編寫;

  ·編譯成各個目標(biāo)模塊;

  ·鏈接成可供下載調(diào)試或固化的目標(biāo)程序。

  2.嵌入式軟件的調(diào)試

  嵌入式軟件的調(diào)試是通過交叉調(diào)試器來完成的,調(diào)試完成后還需進(jìn)行必要的測試工作。交叉調(diào)試器是指調(diào)試程序和被調(diào)試程序運(yùn)行在不同機(jī)器上的調(diào)試器,調(diào)試器通過某種方式能控制目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行方式,通過調(diào)試器能查看和修改目標(biāo)機(jī)上的內(nèi)存、寄存器以及被調(diào)試程序中的變量等。主要的交叉調(diào)試方式有以下幾種。

  (1)Crash and Burn

  Crash and Burn是最早的嵌入式應(yīng)用軟件調(diào)試方法,也是最簡單的。這種方式主要靠程序員的主觀判斷。圖3是這種方式的示意圖。
Image:Crash and Burn調(diào)試.jpg

  (2)ROM Monitor

  ROM Monitor是被固化且運(yùn)行在目標(biāo)機(jī)上的一段程序,負(fù)責(zé)監(jiān)控目標(biāo)機(jī)上被調(diào)試程序的運(yùn)行,與宿主機(jī)端的調(diào)試器一起完成對應(yīng)用程序的調(diào)試。調(diào)試器與ROM Monitor之間的通信遵循遠(yuǎn)程調(diào)試協(xié)議。這種調(diào)試方式如圖4所示。
Image:ROM Monitor調(diào)試.jpg

  這種方式的主要優(yōu)點(diǎn)是:

  ·提高調(diào)試程序的效率,縮短開發(fā)周期,降低成本;

  ·簡單、方便;

  ·可擴(kuò)展性強(qiáng),可支持許多高級調(diào)試功能;

  ·成本低廉,不需專門的調(diào)試硬件支持;

  ·幾乎所有的交叉調(diào)試器都支持這種方式。

  缺點(diǎn)是:

  ·Debug Monitor需要用Crashand Burn方法開發(fā);

  ·當(dāng)ROM Monitor占用CPU時,應(yīng)用程序不響應(yīng)外部的中斷,因此不便調(diào)試有時間特性的程序;

  ·ROM Monitor要占用目標(biāo)機(jī)一定數(shù)量的資源,如CPU、RAM、ROM和通信設(shè)備等資源;

  ·調(diào)試環(huán)境不同于實際目標(biāo)環(huán)境。

  (3)ROM Emulator

  ROM Emulator是一種用于替代目標(biāo)機(jī)上的ROM芯片的設(shè)備,即ROM仿真器。利用這種設(shè)備,目標(biāo)機(jī)可以沒有ROM芯片,但目標(biāo)機(jī)的CPU可以讀取ROM Emulator設(shè)備上ROM芯片的內(nèi)容:ROM Emulator設(shè)備上的ROM芯片的地址可以實時地映射到目標(biāo)機(jī)的ROM地址空間,從而仿真(Emulation)目標(biāo)機(jī)的ROM。

  ROM Emulator的調(diào)試方式是一種不完全的調(diào)試方式:ROM Emulator設(shè)備只是為目標(biāo)機(jī)提供ROM芯片及在Target和Host間建立一條高速的通信通道,因此它經(jīng)常和前面兩種調(diào)試方式結(jié)合起來形成一種完備的調(diào)試方式。ROM Emulator的典型應(yīng)用就是和ROM Monitor的調(diào)試方式相結(jié)合。

  這種調(diào)試方式的優(yōu)點(diǎn)是:保證調(diào)試版本與最終發(fā)布版本一致。缺點(diǎn)是:目標(biāo)機(jī)必須能支持外部ROM存儲空間,而且由于其通常要和ROM Monitor配合使用,因此它擁有ROM Monitor的缺點(diǎn)。

  (4)ICE

  ICE(In—Circuit Emulator)是一種用于替代目標(biāo)機(jī)上CPU的設(shè)備,即在線仿真器。它比一般的CPU有更多的引出線,能夠?qū)?nèi)部的信號輸出到被控制的目標(biāo)機(jī)。ICE上的Memory也可以被映射到用戶的程序空間,這樣即使在目標(biāo)機(jī)不存在的情形下也可以進(jìn)行代碼的調(diào)試。

  連接ICE和目標(biāo)機(jī)時,一般是將目標(biāo)機(jī)的CPU取下,而將ICE的CPU引出線接到目標(biāo)機(jī)的CPU插槽。用ICE進(jìn)行調(diào)試時,在Host端運(yùn)行的調(diào)試器通過ICE來控制目標(biāo)機(jī)上運(yùn)行的程序。

  這種方式能夠同時支持軟件斷點(diǎn)和硬件斷點(diǎn)的設(shè)置,設(shè)置各種復(fù)雜的斷點(diǎn)和觸發(fā)器,實時跟蹤目標(biāo)程序的運(yùn)行,并可實現(xiàn)選擇性的跟蹤。因而,特別適用于調(diào)試設(shè)備驅(qū)動程序、實時的應(yīng)用系統(tǒng),適合對硬件進(jìn)行功能和性能的測試。主要缺點(diǎn)是價格太昂貴,不利于團(tuán)隊開發(fā),所仿CPU有限。

  (5)OCD

  OCD(On Chip Debugging)是CPU芯片提供的一種調(diào)試功能(片上調(diào)試),可以認(rèn)為是一種廉價的ICE功能:OCD的價格只有ICE的20%,但提供了ICE80%的功能。OCD調(diào)試結(jié)構(gòu)如圖5所示。
Image:OCD調(diào)試結(jié)構(gòu).jpg

  這種調(diào)試方式的優(yōu)點(diǎn)是:

  ·不占用目標(biāo)機(jī)的資源;

  ·調(diào)試環(huán)境和最終的程序運(yùn)行環(huán)境基本一致;

  ·支持軟硬斷點(diǎn)、Trace功能;

  ·精確計量程序的執(zhí)行時間;

  ·提供時序分析功能。

  缺點(diǎn)是:

  ·調(diào)試的實時性不如ICE;

  ·不支持非干擾調(diào)試查詢;

  ·CPU必需具有0CD功能。

  OCD的實現(xiàn)方式主要有BDM(Background Debugging Mode)、JTAG(Joint Test Access Group)、ONCE(On Chip Emulation)等幾種。其中,JTAG是主流方式。

  3.嵌入式軟件的固化

  固化運(yùn)行是先用一定的工具將程序固化到目標(biāo)機(jī)上,然后啟動目標(biāo)機(jī),在沒有任何工具干預(yù)的情況下程序能自動地啟動運(yùn)行。根據(jù)目標(biāo)程序的不同,固化的方式可能不一樣。比如,Bootloader的固化一般采用JTAG接口,而內(nèi)核、根文件系統(tǒng)和應(yīng)用程序適用于速度更快的網(wǎng)口。

評論  |   0條評論