百科解釋
目錄·嵌入式系統(tǒng)實例·歷史·特性·嵌入式系統(tǒng)設(shè)計·嵌入式軟件架構(gòu)的類型·外部鏈接·常見的嵌入式操作系統(tǒng) Soekris net4801, 適用于網(wǎng)絡(luò)應(yīng)用程序 嵌入式系統(tǒng)(Embedded system),是一種“完全嵌入受控器件內(nèi)部,為特定應(yīng)用而設(shè)計的專用計算機系統(tǒng)”。與個人計算機這樣的通用計算機系統(tǒng)不同,嵌入式系統(tǒng)通常執(zhí)行的是帶有特定要求的預(yù)先定義的任務(wù)。由于嵌入式系統(tǒng)只針對一項特殊的任務(wù),設(shè)計人員能夠?qū)λM行優(yōu)化,減小尺寸降低成本。由于嵌入式系統(tǒng)通常進行大量生產(chǎn)。所以單個的成本節(jié)約,能夠隨著產(chǎn)量進行成百上千的放大。 個人行動數(shù)碼助理(Personal digital assistants )及手持式計算機(handheld computers)由于它們在硬件上設(shè)計的特性,即使在軟件上的擴充性比其他設(shè)備來得好,但普遍被認為是嵌入式設(shè)備。但是這個定義也逐漸模糊。舉例來說,OQO Model 2被引進了Windows XP操作系統(tǒng)(operating system)上、以及使用像USB port--以上兩種特性皆屬于一般用途計算機,因此嵌入式系統(tǒng)的定義又更模糊了。 嵌入式系統(tǒng)的內(nèi)核是由一個或幾個預(yù)先編程好以用來執(zhí)行少數(shù)幾項任務(wù)的微處理器或者微控制器組成。與通用計算機能夠運行用戶選擇的軟件不同,嵌入式系統(tǒng)上的軟件通常是暫時不變的;所以經(jīng)常稱為“固件(firmware)”。 嵌入式系統(tǒng)實例 自動柜員機(ATM) 航空電子,例如慣性導航系統(tǒng)、飛行控制硬件和軟件以及其他飛機和導彈中的集成系統(tǒng) 手提電話和電信交換 計算機網(wǎng)絡(luò)設(shè)備,包括路由器、時間服務(wù)器和防火墻 打印機 復(fù)印機 磁盤驅(qū)動器(軟盤驅(qū)動器和硬盤驅(qū)動器) 汽車發(fā)動機控制器和防鎖死系統(tǒng)(ABS) 家庭自動化產(chǎn)品,如恒溫器、冷氣機、灑水裝置和安全監(jiān)視系統(tǒng) 手持計算器 家用電器,包括微波爐、洗衣機、電視機、DVD播放器和錄制器 醫(yī)療設(shè)備 測試設(shè)備,如數(shù)字存儲示波器、邏輯分析儀、頻譜分析儀 多功能手表 多媒體電器:因特網(wǎng)無線接收機、電視機頂盒、數(shù)字衛(wèi)星接收器 多功能打印機(MFPs) 個人數(shù)碼助理(PDA),也就是帶有個人信息管理和其他應(yīng)用程序的小型手持計算機 帶有其他能力移動電話,如帶有蜂窩電話、PDA和Java的移動數(shù)字助理(MIDP) 用于工業(yè)自動化和監(jiān)測的可編程邏輯控制器(PLCs) 固定游戲機和便攜式游戲機 可穿戴計算機 歷史 第一個被大家認可的現(xiàn)代嵌入式系統(tǒng)是麻省理工學院儀器研究室的查爾斯·斯塔克·德雷珀開發(fā)的阿波羅導航計算機。在兩次月球飛行中他們在太空駕駛艙和月球登陸艙都是用了這種慣性制導系統(tǒng)。 在計劃剛開始的時候,阿波羅導航計算機被認為是阿波羅計劃風險最大的部分。為了減小尺寸和重量而使用的當時最新的單片集成電路加大了這種風險。 民兵I導彈上的D-17自動導航控制計算機 第一款大批量生產(chǎn)的嵌入式系統(tǒng)是1961年發(fā)布的民兵I導彈上的D-17自動導航控制計算機。它是由獨立的晶體管邏輯電路建造的,它帶有一個作為主內(nèi)存的硬盤。當民兵II導彈在1966年開始生產(chǎn)的時候,D-17由第一次使用大量集成電路的更新計算機所替代。這個項目自己就將方塊與非門集成電路的價格從每個1000美元降到了每個3美元,使得集成電路的商業(yè)應(yīng)用稱為可能。 民兵計算機至關(guān)重要的設(shè)計特性是它的制導算法能夠在項目后期重新編程以獲得更高的導彈精度,并且計算機能夠測試導彈,從而節(jié)省電纜和接頭的重量。 由于這些二十世紀六十年代的對于價格沒有要求的早期應(yīng)用,嵌入式系統(tǒng)的價格開始下降,同時處理能力和功能也獲得了巨大的增長。這個趨勢就是摩爾定律。 第一款微處理器是英特爾4004,它在計算器和其他小型系統(tǒng)中找到了用武之地。但是,它仍然需要外部的內(nèi)存芯片和其他的外部支持邏輯電路。更加強大的微處理器,如英特爾8080被開發(fā)出來用于軍事項目和其他用途。 到了二十世紀七十年代末期,8位微處理器已經(jīng)變得普通,但是它們通常需要外部內(nèi)存芯片和解碼輸入輸出的邏輯電路。然而,價格在快速下降,更多的應(yīng)用領(lǐng)域采用小型的嵌入式系統(tǒng)取代當時常見的專門邏輯設(shè)計。一些容易見到的應(yīng)用是儀器和昂貴的設(shè)備。 到了二十世紀八十年代中期,許多以前是外部系統(tǒng)的組件被集成到同一個處理器芯片中。這樣的結(jié)果就是嵌入式系統(tǒng)尺寸和成本的大幅下降。這樣的集成電路稱為微控制器而不是微處理器,嵌入式系統(tǒng)的大規(guī)模應(yīng)用成為可能。 隨著微控制器的價格已經(jīng)跌落到低于工程師一個小時的工資,嵌入式系統(tǒng)數(shù)量和不同廠商提供的嵌入式系統(tǒng)配件數(shù)量出現(xiàn)了大爆發(fā)。例如,許多新的特殊功能的集成電路開始使用較少插針的串行編程接口而不是傳統(tǒng)的并行接口來來連結(jié)微控制器。I2C也在這個時候出現(xiàn)。 隨著微控制器的價格跌落到1美元以下,使用小型微控制器控制的數(shù)字電路取代如分壓計和可變電容這樣的昂貴模擬組件成為可能。 到了八十年代末期,嵌入式系統(tǒng)已經(jīng)出現(xiàn)在幾乎所有的電子設(shè)備中,這個趨勢依然在繼續(xù)。 特性 嵌入式系統(tǒng)在最廣的意義上說就是計算機系統(tǒng),它包括除了專門用于通用目的之外的所有計算機。從便攜式的音樂播放器到航天飛機的實時控制子系統(tǒng)都能見到嵌入式系統(tǒng)的應(yīng)用。 多數(shù)商業(yè)嵌入式系統(tǒng)都是為了以低成本完成任務(wù)而設(shè)計的。其中絕大多數(shù)都有實時系統(tǒng)約束的要求,但并不是所有的嵌入式系統(tǒng)都有這些要求。對于其中一些過程來說它們要很快地完成,而其他一些功能可能并沒有嚴格的時間要求。這些系統(tǒng)通過與特定目的的硬件和根據(jù)系統(tǒng)要求配置的軟件組合在一起滿足實時要求。 很難根據(jù)速度或者成本描述嵌入式系統(tǒng)的特點,但是對于大批量生產(chǎn)的系統(tǒng)來說,降低成本通常是設(shè)計的首要考慮。嵌入式系經(jīng)常有很低的性能要求,這樣系統(tǒng)硬件就可以簡化以降低成本。工程師最小化的實現(xiàn)通常選擇剛剛滿足所需功能的硬件。 例如,一個衛(wèi)星電視的數(shù)字機頂盒每秒需要處理數(shù)十兆連續(xù)數(shù)據(jù),但是這些數(shù)據(jù)的絕大部分處理過程是由分析、導引和解碼多路數(shù)字視頻的定制的集成電路完成的。嵌入式CPU“建立”這些處理過程并且顯示為機頂盒顯示圖形菜單等外觀。隨著嵌入式處理器速度越來越快、價錢越來越低,它們就可以從事更多的高速數(shù)據(jù)處理。 對于小批量的嵌入式系統(tǒng)來說,經(jīng)常使用個人計算機通過限制運行的程序或者將操作系統(tǒng)更換為實時操作系統(tǒng)來實現(xiàn)。在這種情況下,用于特殊目的的硬件可以替換成一個或多個高性能的CPU。然而,有些嵌入式系統(tǒng)可能仍然需要高性能的CPU、特殊的硬件和大量的內(nèi)存以完成所需任務(wù)。 對于大批量的嵌入式系統(tǒng)來說,如手持音樂播放器或者蜂窩電話,降低成本是需要主要考慮的問題。這些系統(tǒng)通常有少數(shù)幾個集成電路、控制所有其他功能的高度集成的CPU和一片內(nèi)存。在這些系統(tǒng)的設(shè)計中每個組件的選擇和設(shè)計都要有利于降低總體成本。 許多嵌入式系統(tǒng)的軟件,尤其是那些沒有磁盤驅(qū)動器的嵌入式系統(tǒng)的軟件也被稱為固件。固件是嵌入到硬件設(shè)備中的軟件,如固化到一個或多個ROM或者閃存IC芯片中。 嵌入式系統(tǒng)上的程序經(jīng)常運行在有限的硬件資源上:經(jīng)常沒有磁盤、操作系統(tǒng)、鍵盤和屏幕。軟件也可能沒有如文件系統(tǒng)這樣的部分,即使有文件系統(tǒng)的話通常也是使用日志(journaling)文件系統(tǒng)的閃存驅(qū)動器(flash drive)取代旋轉(zhuǎn)的媒體。如果有用戶界面的話,那么它就可能是一個小型按鍵或者液晶顯示。 機器中的嵌入式系統(tǒng)通常需要能夠經(jīng)年不斷地正確運行,所以它們的軟件的開發(fā)和測試都要比個人計算機上的軟件更為仔細。許多嵌入式系統(tǒng)避免使用可動的部件如磁盤驅(qū)動器、開關(guān)和按鈕等,因為可動部件的可靠性要比如閃存這樣的固態(tài)部件的可靠性差。 另外,嵌入式系統(tǒng)可能在人無法到達的地方運行,如下到油井鉆孔中、發(fā)射到外層空間等等,當嵌入式系統(tǒng)必須在人無法到達的地方運行時,嵌入式系統(tǒng)即使在發(fā)生災(zāi)難性的數(shù)據(jù)破壞情況下也必須能夠自行重新啟動。這通常是通過一個名為看門狗計時器的標準電子部件實現(xiàn)的,除非軟件周期性地復(fù)位這個定時器否則它就會復(fù)位計算機。 嵌入式系統(tǒng)設(shè)計 通常使用微處理器或者微控制器構(gòu)建嵌入式系統(tǒng)。一些大型的系統(tǒng)或者早期的系統(tǒng)使用通用大型計算機或者小型計算機構(gòu)建。 用戶界面 嵌入式系統(tǒng)的用戶界面類型非常繁多,所以值得進行特殊說明。 PARC、蘋果計算機公司、波音公司和惠普公司的界面設(shè)計人員發(fā)現(xiàn)界面應(yīng)該遵循減少用戶動作類型這樣一個原則。在嵌入式系統(tǒng)中這樣一個原則經(jīng)常與降低成本的要求結(jié)合在一起。 在嵌入式系統(tǒng)中廣泛采用的一個標準界面是使用兩個按鈕控制一個選單系統(tǒng),其中一個按鈕允許用戶滾動選單條目,另外一個用來選擇條目。 選單系統(tǒng)廣受歡迎是因為它們本身就說明了自身內(nèi)容,并且能夠通過簡單的用戶操作選擇。 另外一個基本的技巧是減少并簡化輸出的類型。有些設(shè)計在每個接口插頭或者錯誤條件使用狀態(tài)燈指示哪一部分發(fā)生故障。一種廉價的做法是使用兩個發(fā)光條,另外帶有一個打印出來的故障代碼表格。用戶可以將他所用語言表示的狀態(tài)貼在標簽上。例如,許多小型打印機使用亮燈表示狀態(tài),這些狀態(tài)標示在打印成所需語言的不干膠標簽上。在一些市場上,他們可能使用幾種這些標簽,這樣用戶就可以選擇最適合他們的語言。 另外一個通用的技巧是界面模式要在用戶的角度上看起來非常清楚。如果一個界面有不同的模式,它們通常應(yīng)該可以用明顯的方式的方式切換回去或者它們能夠自動切換回去。 例如,波音公司的標準的測試界面就是一個按鈕和一些亮燈。當按下按鈕時,所有的燈就會變亮;當松開按鈕時,出現(xiàn)故障的指示燈就不會熄滅。它們的標簽都是用基礎(chǔ)英語表示的。 設(shè)計人員會用不同的顏色表示狀態(tài)。紅色表示“危險”或者一些錯誤發(fā)生導致整個系統(tǒng)故障;黃色表示一些部分可能有故障;綠色表示狀態(tài)正;蛄己。這就類似于街頭的紅綠燈,大多數(shù)人都知道它們的含義。 一些設(shè)計保證在用戶操作之后馬上顯示狀態(tài)的變化。如果機器要做什么動作,通常在7秒內(nèi)開始并且匯報工作過程。 如果一項設(shè)計需要屏幕,設(shè)計人員經(jīng)常選擇純文本方式。優(yōu)先選用這種方式是因為用戶已經(jīng)有多年識別標記的經(jīng)驗。圖形用戶接口看起來很漂亮也能完成所有的功能,但是通常它們會增加一年的設(shè)計、批準和翻譯延期、增加項目一到兩個程序員的費用,而這些工作并沒有多少實際意義。經(jīng)常一個過于聰明的圖形用戶接口因為可能使用用戶不熟悉的符號,所以實際上可能會讓他們感到困惑。 如果設(shè)計需要指示如復(fù)印機那樣的機器零部件,在實際的機器上它們通常使用數(shù)字進行編號,這些編號能在機器外觀上看到。 網(wǎng)絡(luò)界面就是一個遠程的屏幕,同其他的用戶界面類似。 最成功的屏幕界面之一就是兩個選單按鈕和一行用戶所說語言的文本。它用在尋呼機、中檔打印機、網(wǎng)絡(luò)交換機和其他一些需要用戶復(fù)雜操作的中檔價位的場合。 如果使用的是較大的屏幕,觸摸屏和屏幕旁的按鈕也可以減少用戶操作的類型并且容易控制選單選擇。這種系統(tǒng)的優(yōu)點就是按鈕的含義可以隨著屏幕而變化,并且選擇的過程非常類似于人們自然選擇東西的方式。 當使用文本的時候,設(shè)計人員就要選擇一種或者多種語言。缺省語言通常是目標用戶最為常用的語言。許多設(shè)計人員使用目標客戶群的本地語言以更好地滿足他們的需要。 文本通常是由專業(yè)人員進行翻譯,即使開發(fā)人員也說那種語言也是這樣。市場銷售人員能夠告訴國外的銷售商說這些翻譯都是非常專業(yè)的。一個國外的制造商有可能要求最大的銷售商審查、更正這些本地語言的翻譯以促進產(chǎn)品被本地銷售人員接受。 許多權(quán)威人士認為可用性測試比任何數(shù)量的觀點都重要,設(shè)計人員推薦可用性要盡早進行測試。一個常用的快速、dirty測試方法是讓秘書使用工程師使用奇怪的標志拖動、控制的紙板模型。錄制的錄像帶顯示這樣做不僅很幽默也很有教育意義,In the tapes, every time the engineer talks, the interface has failed because it would cause a service call. 在許多組織里,用戶界面要有一個人要批準,通常這個人是客戶、主要的銷售商或者直接負責系統(tǒng)銷售的人。 平臺 在嵌入式系統(tǒng)設(shè)計中有許多不同的CPU架構(gòu),如ARM、MIPS、Coldfire/68k、PowerPC、X86、PIC、Intel 8051、Atmel AVR、Renesas H8、SH、V850、FR-V、M32R、DMCU等。 這與桌面計算機市場有所不同,寫這篇文章的2003年為止在那個領(lǐng)域只有少數(shù)幾家競爭的架構(gòu),其中主要是英特爾/AMDx86和用于Apple Macintosh的Apple/Motorola/IBM PowerPC。在桌面計算機領(lǐng)域,隨著對于Java接受程度的增長,軟件對于特定運行環(huán)境的依賴越來越少。 PC/104標準是小型、小批量嵌入式和ruggedized系統(tǒng)設(shè)計的基礎(chǔ)。這些系統(tǒng)通常使用DOS、Linux、NetBSD或者如QNX、Inferno這樣的實時嵌入式操作系統(tǒng)。 大批量生產(chǎn)的嵌入式系統(tǒng)的通常配置是系統(tǒng)單芯片(en:System On Chip),它是一個專用集成電路,CPU是外購的知識產(chǎn)權(quán)并且添加到集成電路設(shè)計中。一個類似的常用機制是使用可編程門陣列,所有的邏輯包括CPU部分都可以編程實現(xiàn)。許多時髦的FPGA都是為這個目的設(shè)計的。 工具 同典型的計算機程序員一樣,嵌入式系統(tǒng)設(shè)計人員也使用編譯器、連結(jié)器和調(diào)試器開發(fā)嵌入式系統(tǒng)軟件。然而,他們也使用一些大多數(shù)程序員不熟悉的工具。 軟件工具的來源有如下幾種: 專注于嵌入式系統(tǒng)市場的軟件公司 從GNU軟件開發(fā)工具移植(參見交叉平臺編譯) 有些情況下,如果嵌入式處理器與普通個人計算機處理器很近似的話也可以使用個人計算機開發(fā)工具 嵌入式系統(tǒng)設(shè)計人員也使用一些不為普通計算機程序員所熟悉的軟件工具: 一個常用工具是“電路內(nèi)部仿真器”(ICE,in-circuit emulator)或者是最新設(shè)計中的嵌入式調(diào)試器。這個調(diào)試工具是開發(fā)嵌入式程序的基本技巧。它代替微處理器或者嵌入微處理器內(nèi)部,提供了在系統(tǒng)中快速調(diào)用和調(diào)試試驗代碼的便捷工具。一個焊點通常就是一個插入系統(tǒng)的特殊電路,通常使用一臺連結(jié)到這些焊點的個人計算機作為調(diào)試界面。 連結(jié)器通常是各種各樣(exotic)。對于大多數(shù)商業(yè)編程來說,連接器幾乎總是最后才想起的(afterthough)部分,缺省設(shè)置也從來不變。與此相反,嵌入式連結(jié)器有完整、復(fù)雜的命令行語言是很普通的。經(jīng)常有不同類型的內(nèi)存,分別保存特殊的代碼和數(shù)據(jù)。單獨的數(shù)據(jù)結(jié)構(gòu)能夠放在特殊的地址,這樣軟件能夠很方便地訪問映射到內(nèi)存的控制寄存器。嵌入式連結(jié)器經(jīng)常有用于減小代碼大小和運行時間的外部(exotic)優(yōu)化工具。例如,他們可能移動子程序的位置以使用較小的調(diào)用和跳轉(zhuǎn)指令。它們經(jīng)常帶有管理data overlays和band switch技術(shù)的特性,這些技術(shù)是在嵌入式軟件經(jīng)常使用的擴展廉價CPU的方法。 另外一個常用的工具是一個在程序中添加代碼和或者CRC的工具程序(經(jīng)常是自己寫的),使用這個工具嵌入式系統(tǒng)能夠在執(zhí)行程序之前先進行程序數(shù)據(jù)檢查。 為數(shù)字信號處理開發(fā)軟件的嵌入式程序員經(jīng)常使用MatchCad或者Mathematica這樣的數(shù)學工具進行數(shù)學仿真。 一些較少使用的工具有將數(shù)據(jù)文件轉(zhuǎn)換成代碼的工具,使用這種工具就可以在程序中包含任意類型的數(shù)據(jù)。 少數(shù)一些項目為了特殊的可靠性或者數(shù)字信號處理要求使用同步編程語言。 一些編程語言為嵌入式系統(tǒng)編程提供了一些特殊支持。 對于C語言,ISO/IEC TR 18037:2005定義了 指定的地址空間 指定的存儲類 基本輸入輸出的硬件尋址 調(diào)試 調(diào)試通常使用內(nèi)部電路仿真器或者其他一些能夠在微控制器微碼(microcode)內(nèi)部產(chǎn)生中斷的調(diào)試器。微碼中斷讓調(diào)試器能夠在只有CPU工作的硬件中進行操作,基于CPU的調(diào)試器能夠從CPU的角度來測試和調(diào)試計算機的電路。PDP-11開創(chuàng)了這種特性的先河。 開發(fā)人員能夠仍然使用斷點、單步執(zhí)行以及高級語言進行調(diào)試,在許多的調(diào)試工具上都有這種能力。另外開發(fā)人員在調(diào)試實時事件順序的時候需要記錄、使用簡單的記錄工具。 首先遇到這種問題的個人電腦和大型機程序員經(jīng)常在設(shè)計優(yōu)先級和可行方法的時候感到困惑。指導、代碼審查和非個人風格(egoless)的編程是值得推薦的。 隨著嵌入式系統(tǒng)變得越來越復(fù)雜,更高層次的工具和操作系統(tǒng)逐漸移植到可行的設(shè)備上。例如,蜂窩電話、個人數(shù)字助理和其他的消費用計算機需要一些從個人或者這些電子設(shè)備制造商之外的公司購買或者提供的一些重要軟件。在這些系統(tǒng)中,需要如Linux、OSGi或者Java這樣的開放編程環(huán)境,這樣第三方軟件提供上才能夠在大規(guī)模的市場上銷售軟件。 大多數(shù)這樣的開發(fā)環(huán)境都有一個運行在個人電腦上的參考設(shè)計,這種軟件的絕大部分都可以在傳統(tǒng)的個人電腦上開發(fā)。然而,從開放環(huán)境移植到專用的電子設(shè)備和電子設(shè)備的驅(qū)動程序開發(fā)通常仍然是傳統(tǒng)的嵌入式系統(tǒng)軟件工程師的工作。在有些情況下, the engineer works for the integrated circuit manufacturer, but there is still such a person somewhere. 操作系統(tǒng) 使用Windows XP的因特網(wǎng)收費電話 嵌入式系統(tǒng)經(jīng)常沒有操作系統(tǒng)、專用的嵌入式操作系統(tǒng)(經(jīng)常是實時操作系統(tǒng))或者指定程序員移植到這些新系統(tǒng)。 啟動 嵌入式系統(tǒng)帶有啟動代碼,通常它禁止中斷、設(shè)置電子設(shè)備參數(shù)、測試計算機(RAM、CPU和軟件),然后開始應(yīng)用程序運行。許多嵌入式系統(tǒng)從短暫的掉電狀態(tài)恢復(fù),經(jīng)常重起而不進行最近的自檢。在十分之一秒內(nèi)重起是常見的現(xiàn)象。 許多設(shè)計人員發(fā)現(xiàn)LED在指示錯誤狀態(tài)上非常有用,它們可以幫助進行故障處理。一個常用的機制是在復(fù)位的時候點亮電子設(shè)備所有的LED以表明供電和LED正常工作;然后在進行加電自檢時由軟件改變LED的狀態(tài);在此之后,軟件用這些LED指示操作過程中的正常或者故障狀態(tài)。這可以讓技術(shù)人員、工程師和用戶了解系統(tǒng)的狀態(tài)。一個有趣的例外是電度表(electric power meters)和其他一些大街上的東西,閃爍的指示燈是為了吸引注意力或者表示損壞狀態(tài)。 內(nèi)部自檢 許多嵌入式系統(tǒng)都有一定程度或者一定數(shù)量的內(nèi)部加電自檢,自檢有幾種類型: 計算機檢查:檢查CPU、RAM和程序存儲器。通常一加電就開始這些檢查,在一些安全性非常重要的系統(tǒng)中,通常周期性地在安全時間間隔內(nèi)進行自檢,或者經(jīng)過一段時間就進行自檢。 外圍設(shè)備檢查:仿真輸入和讀入數(shù)據(jù)或者測量輸出數(shù)據(jù)。有大量的通信、模擬和控制系統(tǒng)都有這些非常廉價的檢查。 電源檢查:通常測試每個供電電路,也可能檢查電池或者主電源輸入。通常供電部分的負載都很重,并且少有余量,所以這項檢查很有意義。 通信檢查:驗證從相連單元接收到的簡單消息,例如在互聯(lián)網(wǎng)上使用ICMP消息“ping”。 電纜檢查:將線連結(jié)到待檢查的電纜上指示針進行檢查。如電話這樣的同步通信系統(tǒng)經(jīng)常使用“同步”測試。電纜檢查成本很低,當單元部分有插頭的時候這項檢查尤其重要。 裝備檢查:一個系統(tǒng)在安裝時經(jīng)常需要進行調(diào)整,這項檢查就向安裝人員做出狀態(tài)指示。 消耗檢查:檢查系統(tǒng)所消耗的東西、在預(yù)量太低時發(fā)出警告。最常見的例子是汽車的油量表,最復(fù)雜的例子可能是維持化學反應(yīng)物詳細狀態(tài)的自動醫(yī)學分析系統(tǒng)。 運行檢查:檢查用戶關(guān)心的系統(tǒng)運行狀態(tài)。顯然,在系統(tǒng)運行時必須進行這項檢查,這方面的檢查包括飛機上的導航儀器、汽車的速度表和磁盤的指示燈等。 安全檢查:在''安全時限''內(nèi)進行檢查確保系統(tǒng)仍然可靠。安全時限通常小于能夠產(chǎn)生損害的最小時間。 可靠性體系 根據(jù)人們需求的不同可靠性也有不同的定義,有意思的事,可靠性的類型卻相對較少,相似可靠性類型的系統(tǒng)使用相似類型的內(nèi)在檢查和恢復(fù)方法: 系統(tǒng)非常不安全或者無法修理。這包括太空系統(tǒng)、水下電纜、導航燈塔、鉆孔系統(tǒng),非常奇怪的是還包括汽車和大規(guī)模生產(chǎn)產(chǎn)品?偟膩碚f,嵌入式系統(tǒng)檢測各個子系統(tǒng)、在線切換到冗余部分或者工作在“l(fā)imp 模式”提供部分的功能。大規(guī)模生產(chǎn)的消費產(chǎn)品如汽車、個人電腦或者打印機也屬于這個類別,這是因為與購買的費用相比維修費用高昂、維修人員又路途遙遠。 系統(tǒng)不能安全地停止運行。這包括飛機導航、反應(yīng)控制系統(tǒng)、重要的化學工廠安全控制、鐵路信號、單發(fā)動機飛機的發(fā)動機,如上所述,但是“l(fā)imp 模式”較難容忍,通常需要操作員選擇備份系統(tǒng)。 系統(tǒng)停機時將會造成大量的金錢損失。這些包括電話交換機、工廠控制、橋梁和電梯控制、資金轉(zhuǎn)移、市場開發(fā)、自動銷售和服務(wù)等,這些系統(tǒng)通常有一些運轉(zhuǎn)/不運轉(zhuǎn)測試,它們通常帶有在線冗余或者使用替換系統(tǒng)和人工過程的 limp 模式。 系統(tǒng)不安全的時候不能操作。同上面的情況類似,系統(tǒng)的運行將會造成大量的金錢損失。醫(yī)療設(shè)備、帶有發(fā)動機這樣的熱備份的飛行器、化學工廠控制、自動股票交易、游戲系統(tǒng)等。測試可能是五花八門,但是出錯時能夠做的就是停止整個系統(tǒng)。 嵌入式軟件架構(gòu)的類型 常用的嵌入式軟件架構(gòu)有幾種不同的基本類型。 控制循環(huán) 在這種設(shè)計中,軟件有一個簡單的循環(huán),這個循環(huán)調(diào)用各個子程序,每個子程序管理硬件或者軟件的某一部分。中斷通常用來設(shè)置標記或者更新軟件其他部分能夠讀取的寄存器。 系統(tǒng)使用簡單的API來完成允許和禁止中斷設(shè)置。如果處理得當?shù)脑,它能夠在嵌套子程序中處理嵌套調(diào)用,在最外面的中斷允許嵌套中恢復(fù)前面的中斷狀態(tài)。這種方法是實作Exokernel的一個最簡單的方法。 通常在循環(huán)中有一些子程序使用周期性的即時中斷控制一組軟件定時器,當一個定時器時間到的時候就會執(zhí)行相應(yīng)的子程序或者設(shè)置相應(yīng)的標志。 任何可能發(fā)生的硬件事件都應(yīng)該有軟件定時器的支持,硬件事件大概每萬億次出現(xiàn)一次錯誤,對于現(xiàn)代的硬件來說大概是一年發(fā)生一次,對于以百萬計大規(guī)模生產(chǎn)的設(shè)備來說,遺漏一個軟件軟件定時器在商業(yè)上可能是災(zāi)難性的。 有時測試軟件運行一組基于軟件的安全定時器,它們周期性地復(fù)位硬件中的軟件看門狗。如果軟件錯過一個事件,安全定時器軟件將會捕捉到它。如果安全定時器出錯,看門狗硬件將會復(fù)位系統(tǒng)。 可以使用指向每個狀態(tài)機函數(shù)的指針實作狀態(tài)機,函數(shù)可以用C++、C或者匯編語言等實作。變化的狀態(tài)將不同的函數(shù)放到指針中,每次循環(huán)運行時都會執(zhí)行函數(shù)指針。 許多設(shè)計人員建議每個循環(huán)讀一次輸入輸出設(shè)備、并且保存得到的結(jié)果,這樣可以保證邏輯過程的在一致的參數(shù)上運行。 許多設(shè)計人員喜歡將狀態(tài)機設(shè)計成每個狀態(tài)僅僅檢查一到兩項內(nèi)容,通常是檢查硬件事件和軟件定時器。 設(shè)計人員建議多級狀態(tài)機應(yīng)該讓低層狀態(tài)機早于高層狀態(tài)機運行,這樣高層就能夠根據(jù)正確的信息運行。 如內(nèi)部燃燒控制這樣的復(fù)雜功能通常根據(jù)多維表格進行處理,代碼通常進行查表處理而不進行復(fù)雜的計算,為了減小表格的大小以及成本軟件可以在條目之間進行差值運算。 在最小的微控制器中,尤其是只有128字節(jié)堆棧的8051中,控制環(huán)允許好的連接器使用靜態(tài)分配的數(shù)據(jù)覆蓋本地變量。在這種機制中,離子程序調(diào)用樹末端越近的變量得到的內(nèi)存地址越高。當開始一個新的分支的時候,它的變量可以在以前分支遺棄的空間中進行重新分配。 簡單控制循環(huán)的一個主要缺點是它無法保證響應(yīng)特定硬件事件的時間。 細心的設(shè)計可以很容易地保證中斷不會被長時間禁止,這樣中斷代碼就可以在非常精確的時間運行。 控制環(huán)的另外一個主要缺陷是增加新的特性的時候會變得復(fù)雜。需要花費很長時間的算法必須小心地進行分解以使得每次只有一小部分在主循環(huán)中運行。 這種系統(tǒng)的優(yōu)勢是它的簡單性,并且在很小的軟件上,循環(huán)執(zhí)行地很快幾乎沒有人關(guān)心它是不可預(yù)測的。 它的另外一個優(yōu)勢是這種系統(tǒng)保證運行軟件的質(zhì)量,無法將不好的運行結(jié)果歸咎為其他的操作系統(tǒng)。 非搶先多任務(wù) 非搶先多任務(wù)系統(tǒng)非常類似于上面的系統(tǒng),只是這個循環(huán)是隱藏在API中的。我們定義一系列的任務(wù),每個任務(wù)獲得自己的子程序棧;然后,當一個任務(wù)空閑的時候,它調(diào)用一個空閑子程序(通常調(diào)用“暫!薄ⅰ暗群颉、“交出(:en:yield)”等等)。 帶有類似屬性的架構(gòu)都帶有一個事件隊列,有一個循環(huán)根據(jù)隊列列表中的一個域確定刪除時間和調(diào)用子程序。 這種架構(gòu)的優(yōu)點和缺點都非常類似于控制環(huán),只是這種方法添加新的軟件更加簡單,只需要簡單地編寫新的任務(wù)或者將它添加到隊列解釋器中。 搶先式定時器 使用上面的任何一種系統(tǒng),但是添加一個按照定時器中斷運行子程序的定時器系統(tǒng),這樣就給系統(tǒng)添加了嶄新的能力,這樣定時器子程序第一次能在一個有保證的時間內(nèi)運行。 另外,代碼第一次能夠在非預(yù)期的時間訪問自己的數(shù)據(jù)結(jié)構(gòu)。定時器子程序必須要象中斷子程序一樣進行處理。 搶先式任務(wù) 使用上面的非搶先式任務(wù)系統(tǒng),從一個搶先式定時器或者其他中斷運行。 這樣系統(tǒng)就突然變得很不一樣了。任何一個任務(wù)的代碼都有可能損害其他任務(wù)的數(shù)據(jù) &emdash; 所以它們必須進行切缺的切分。對于共享數(shù)據(jù)的訪問必須使用一些同步策略進行控制,如消息隊列、信號燈或者非阻塞同步機制。 經(jīng)常在這一步開發(fā)組織就會購買一套實時操作系統(tǒng)。如果一個組織缺少能夠編寫操作系統(tǒng)的人才或者操作系統(tǒng)將要在幾個產(chǎn)品之上,這可能是一個明智的選擇。這通常要將開發(fā)計劃增加六倒八周,and forever after programmers can blame delays on it. 微內(nèi)核與外內(nèi)核 這種方法試圖將系統(tǒng)組織得比大內(nèi)核更易于配置,而同時提供類似的特點。 微內(nèi)核是實時操作系統(tǒng)的一個邏輯發(fā)展,通常的組織方式是操作系統(tǒng)內(nèi)核分配內(nèi)存并且將CPU在不同的線程之間進行切換。用戶模式的進程實現(xiàn)如文件系統(tǒng)、用戶接口等主要的功能。 微內(nèi)核在二十世紀五十年代開始首次嘗試,但是由于計算機在任務(wù)間切換以及在任務(wù)間交換數(shù)據(jù)速度非常緩慢,所以人們放棄了微內(nèi)核而鐘情于MULTICS和UNIX風格的大內(nèi)核。總體上來說,微內(nèi)核在任務(wù)切換以及任務(wù)間通信速度快的時候是比較成功的,在速度慢的時候是失敗的。 外內(nèi)核通過使用普通的子程序調(diào)用獲得的通信效率很高,硬件以及系統(tǒng)中的軟件都是程序員能用也能擴展的。資源內(nèi)核(可能是庫的一部分)分配CPU時間、內(nèi)存以及其他資源。如多任務(wù)、網(wǎng)絡(luò)以及文件系統(tǒng)這樣的大內(nèi)核特性通過代碼庫來提供。庫可以進行動態(tài)的連接、擴展或者共享。不同的應(yīng)用甚至可以使用的不同的庫,但是所有的資源都來自于資源內(nèi)核。 虛擬機 一些航空電子系統(tǒng)使用幾個商用計算機。這樣更進一步,每個計算機都在模擬它們自身的幾個副本,重要的程序同時在幾個計算機上運行并且進行投票控制(:en:vote)。 模擬環(huán)境的優(yōu)點就是即使一個計算機出現(xiàn)故障,軟件的不同例程能夠遷移到正常工作的軟件分區(qū),表決的票數(shù)并不受影響。 通常虛擬軟件運行在計算機的用戶模式下,它捕捉、模擬硬件訪問和不在用戶模式下運行的指令。 檢查點計算 另外一種常用的機制是兩個計算機計算 for a bit,然后將它們的計算結(jié)果報到那個點上。如果一個計算機的計算是 nut,它就會被關(guān)閉。 辦公用(大內(nèi)核)操作系統(tǒng) 這種系統(tǒng)通常在沒有系統(tǒng)經(jīng)費的嵌入式項目中流行,但是從這篇文章的多個作者來看,這通常是不正確的,它們的邏輯是: 操作系統(tǒng)是經(jīng)過特殊封裝的重用代碼庫。如果這些代碼有用,設(shè)計人員就會節(jié)省時間和金錢,否則它們就是無用的。 商務(wù)系統(tǒng)的操作系統(tǒng)沒有嵌入式硬件的接口。例如,如果要用Linux寫一個馬達控制器或者電話交換機,絕大部分的實際控制操作都是IOCTL調(diào)用,同時,正常的讀、寫和查詢界面都是無用的。所以操作系統(tǒng)對于實際的開發(fā)妨礙很大。 大多數(shù)的嵌入式系統(tǒng)不處理辦公事務(wù),所以辦公操作系統(tǒng)的大部分代碼都被浪費了。例如,絕大多數(shù)的嵌入式系統(tǒng)從來都不使用文件系統(tǒng)或者屏幕,所以文件系統(tǒng)和圖形用戶界面部分就是浪費的,這些不用的代碼只會影響系統(tǒng)的可靠性。 辦公用操作系統(tǒng)保護硬件不讓用戶程序操作,這就嚴重地妨礙了嵌入式開發(fā)工作。 操作系統(tǒng)必須移植到嵌入式系統(tǒng)上,也就是說,硬件驅(qū)動程序無論如何都必須重寫,這也是操作系統(tǒng)最難的部分,所以使用這樣的操作系統(tǒng)幾乎沒有功效。 操作系統(tǒng)真正有用、可移植的特性是小段代碼。例如,一個基本的TCP/IP接口大約有3000行代碼,另外的一個例子是大約同樣大小的簡單文件系統(tǒng)。如果設(shè)計需要這些代碼,能夠使用少于嵌入式系統(tǒng)開發(fā)10%的經(jīng)費就能完成,不需要支付版權(quán)費用,只需要簡單地重寫就可以了。如果系統(tǒng)這些代碼有足夠的通用性,嵌入式系統(tǒng)雜志封面的后面通常有公司銷售沒有版權(quán)費的C語言實現(xiàn)代碼。 然而許多任務(wù)程師并不認同這一點,嵌入式Linux越來越受到人們的歡迎,尤其是在無線路由器和全球定位系統(tǒng)這樣的功能強大的嵌入式系統(tǒng)中。其中有下面一些原因: 有現(xiàn)成的移植到普通嵌入式芯片的實現(xiàn)代碼。 它們允許重用公開獲得的設(shè)備驅(qū)動程序、網(wǎng)頁服務(wù)器、防火墻或者其他代碼。 開發(fā)系統(tǒng)能夠從許多特性組合開始,在發(fā)布的時候可以剔除不需要的功能,從而節(jié)約所消耗的內(nèi)存。 許多任務(wù)程師認為在用戶模式運行應(yīng)用程序更為可靠、更容易調(diào)試,所以開發(fā)過程更容易、代碼更易于移植。 許多嵌入式系統(tǒng)沒有控制系統(tǒng)那樣對于實時性的嚴格要求,對于許多應(yīng)用來說如嵌入式Linux這樣的系統(tǒng)的響應(yīng)速度就已經(jīng)足夠了。 要求更快的響應(yīng)速度,而不是可靠性的特性,通常放到了硬件上。 許多實時操作系統(tǒng)都針對每件產(chǎn)品收取費用,當產(chǎn)品是消費品時,這項費用是巨大的。 Exotic custom 操作系統(tǒng) 一些系統(tǒng)需要安全、及時、可靠或者高效的特性,上面的架構(gòu)卻無法達到,構(gòu)建這樣的系統(tǒng)有一些廣為人知的技巧: 雇傭一個真正的系統(tǒng)程序員。他們的花費很小,但是能夠節(jié)約數(shù)年的調(diào)試以及相關(guān)的收入損失。 RMA (rate monotonic analysis),可以用來評估一組任務(wù)能否在特定的硬件系統(tǒng)下運行,在最簡單的形式下,設(shè)計人員保證最快完成的任務(wù)有最高的優(yōu)先級,平均來說 CPU 至少有 30% 的空閑時間。 和諧的任務(wù)能夠高效地優(yōu)化CPU;旧蟻碚f,設(shè)計人員保證每件工作都是從heartbeat timer開始工作的。在實時操作系統(tǒng)上很難這樣做,因為它們在等候輸入輸出設(shè)備的時候通常就會切換任務(wù)。 剛好有兩個優(yōu)先級(通常是運行和禁止中斷)的系統(tǒng)不能出現(xiàn)高優(yōu)先級任務(wù)等候低優(yōu)先級任務(wù)釋放信號燈或者其他資源的優(yōu)先級倒置問題, 有監(jiān)視器(:en:monitor)的系統(tǒng)不能出現(xiàn)死鎖。監(jiān)視器鎖住一段代碼禁止中斷和其他搶先任務(wù)。如果這個監(jiān)視器只用于一小段快速運行的代碼,系統(tǒng)可能工作正常。如果能夠證明監(jiān)視器 API 在所有情況下都能夠完整運行,例如僅僅禁止中斷,那么就不會產(chǎn)生系統(tǒng)掛起的情況。 這就意味著使用兩個優(yōu)先級和監(jiān)視器的系統(tǒng)是安全、可靠的,因為它們沒有死鎖和優(yōu)先級倒置的問題。如果監(jiān)視器能夠執(zhí)行到結(jié)束,那么就永遠不會掛起。如果使用和諧的任務(wù),可能還會相當高效。然而,RMA 無法描述這些系統(tǒng),優(yōu)先級最好也不要到處都有,其中包括操作系統(tǒng)和硬件。 外部鏈接 即時操作系統(tǒng)如何工作 (英) 嵌入式系統(tǒng)門戶(英) 窗口嵌入開發(fā)者中心(英) 嵌入系統(tǒng)與VLIW處理器(英) 嵌入式 C++ 首頁(英) QNX 首頁(英) LynuxWorks 嵌入式系統(tǒng)首頁(英) 嵌入式系統(tǒng)討論群、書籍、職缺、與其他林林總總(英) 嵌入式軟件設(shè)計(英) 擁有嵌入式系統(tǒng)研發(fā)社團的大學列表(英) 嵌入式系統(tǒng)編程(英) EE概要 - 電機工程與嵌入系統(tǒng)編程(英) DeviceTools - 給內(nèi)嵌設(shè)備開發(fā)者的工具與硅片(英) Embedian(英) 內(nèi)嵌計算工業(yè)的紀錄雜志(英) 內(nèi)嵌白皮書、下載、公司、新聞、文章(英) 內(nèi)嵌系統(tǒng)疑難解答 - 一個概述從基版醞釀、制造、到后勤的問題。(英) 常見的嵌入式操作系統(tǒng) 參見嵌入式操作系統(tǒng) uC/OS II uCLinux Arm-Linux VxWorks pSOS Nucleus PalmOS Windows CE Windows XP Embedded Windows Vista Embedded 嵌入式Linux ECOS QNX Lynx Symbian
移動通信網(wǎng) | 通信人才網(wǎng) | 更新日志 | 團隊博客 | 免責聲明 | 關(guān)于詞典 | 幫助