• 沒有找到結果。

嵌入式系統嵌入式系統嵌入式系統嵌入式系統 嵌入式系統(

N/A
N/A
Protected

Academic year: 2022

Share "嵌入式系統嵌入式系統嵌入式系統嵌入式系統 嵌入式系統("

Copied!
13
0
0

加載中.... (立即查看全文)

全文

(1)

嵌入式系統 嵌入式系統 嵌入式系統 嵌入式系統

嵌入式系統(Embedded system),是一種「完全嵌入受控器件內部,為特定應用 而設計的專用電腦系統」,根據英國電器工程師協會( U.K. Institution of Electrical Engineer)的定義,嵌入式系統為控制、監視或輔助設備、機器或用於工廠運作 的裝置。與個人電腦這樣的通用電腦系統不同,嵌入式系統通常執行的是帶有特 定要求的預先定義的任務。由於嵌入式系統只針對一項特殊的任務,設計人員能 夠對它進行最佳化,減小尺寸降低成本。由於嵌入式系統通常進行大量生產。所 以單個的成本節約,能夠隨著產量進行成百上千的放大。

由於個人數位助理(PDA,Personal Digital Assistant)及手持裝置在硬體上設計的特 性,即使在軟體上的擴充性比其他裝置來得好,但普遍被認為是嵌入式裝置。但 是這個定義也逐漸模糊。舉例來說,Intel 公司的凌動(ATOM)微處理器原本是 為了移動網際網路裝置(MID,Mobile Internet Device)這一類的嵌入式系統設計 的,但是現在更多的被應用於小筆電(Netbook),而小筆電屬於使用 Windows 或者 Linux 的個人電腦,因此嵌入式系統的定義又更模糊了。

嵌入式系統的核心是由一個或幾個預先編程好以用來執行少數幾項任務的微處 理器或者微控制器組成。與通用電腦能夠執行使用者選擇的軟體不同,嵌入式系 統上的軟體通常是暫時不變的;所以經常稱為「韌體」。

嵌入式系統例項

自動櫃員機(ATM)

航空電子,例如慣性導航系統、飛行控制硬體和軟體以及其他飛機和飛彈中 的整合系統

手提電話和電信交換機

電腦網路裝置,包括路由器、時間伺服器和防火牆

辦公裝置,包括印表機、影印機、傳真機、多功能印表機(MFPs)

磁碟機(軟碟機和硬碟機)

汽車發動機控制器和防鎖死剎車系統

家庭自動化產品,如恆溫器、冷氣機、洒水裝置和安全監視系統 手持計算機

家用電器,包括微波爐、洗衣機、電視機、DVD 播放器和錄製器 醫療裝置,如 X 光機、核磁共振成像儀

測試裝置,如數位儲存示波器、邏輯分析儀、頻譜分析儀 多功能手錶

多媒體電器:網際網路無線接收機、電視機頂盒、數位衛星接收器

個人數位助理(PDA),也就是帶有個人資訊管理和其他應用程式的小型手

(2)

持電腦

帶有其他能力行動電話,如帶有蜂窩電話、個人數位助理(PDA)和 Java 的 移動數位助理(MIDP)

用於工業自動化和監測的可編程邏輯控制器(PLCs)

固定遊戲機和攜帶型遊戲機 可穿戴電腦

歷史

第一個被大家認可的現代嵌入式系統是麻省理工學院儀器研究室的查爾斯•斯塔 克•德雷珀開發的阿波羅導航電腦。在兩次月球飛行中他們在太空駕駛艙和月球 登陸艙都是用了這種慣性導航系統。

在計劃剛開始的時候,阿波羅導航電腦被認為是阿波羅計劃風險最大的部分。為 了減小尺寸和重量而使用的當時最新的單片積體電路加大了阿波羅計劃的風 險。

第一款大批次生產的嵌入式系統是 1961 年釋出的民兵 I 飛彈上的 D-17 自動導航 控制電腦。它是由獨立的電晶體邏輯電路建造的,它帶有一個作為主內部記憶體 的硬碟。當民兵 II 飛彈在 1966 年開始生產的時候,D-17 由第一次使用大量積體 電路的更新電腦所替代。僅僅這個項目就將與非門積體電路模組的價格從每個 1000 美元降到低了每個 3 美元,使積體電路的商用成為可能。

民兵飛彈的嵌入式電腦有一個重要的設計特性:它能夠在項目後期對制導演算法 重新編程以獲得更高的飛彈精度,並且能夠使用電腦測試飛彈,從而減少測試用 電纜和接頭的重量。

這些二十世紀六十年代的早期應用,使嵌入式系統得到長足發展,它的價格開始 下降,同時處理能力和功能也獲得了巨大的提高。英特爾 4004 是第一款微處理 器,它在計算機和其他小型系統中找到了用武之地。但是,它仍然需要外部儲存 裝置和外部支援晶片。1978 年,國家工程製造商協會釋出了可編程微控制器的

「標準」,包括幾乎所有以電腦為基礎的控制器,如微控制器,數控裝置,以及 基於事件的控制器。

隨著微控制器和微處理器的價格下降,一些消費性產品用使用微控制器的數位電 路取代如分壓計和可變電容這樣的昂貴類比元件成為可能。

到了二十世紀八十年代中期,許多以前是外部系統的元件被整合到了處理器晶片

(3)

中,這種結構的微處理器得到了更廣泛的應用。到了八十年代末期,微處理器已 經出現在幾乎所有的電子裝置中。

整合化的微處理器使得嵌入式系統的應用擴充功能到傳統電腦無法涉足的領域。

對多用途和相對低成本的微控制器進行編程,往往可成為各種不同功能的元件。

雖然要做到這一點,嵌入式系統比傳統的解決方案要複雜,最複雜的是在微控制 器本身。但是嵌入式系統很少有額外的元件,大部分設計工作是軟體部分。而非 物質性的軟體不管是建立原型還是測試新修改相對於硬體來說,都要容易很多的,

並且設計和建造一個新的電路不會修改嵌入式處理器。

特性

嵌入式系統在廣義上說就是電腦系統,它包括除了以通用為目的電腦之外的 所有電腦。從行動式音樂播放器到太空梭的即時控制子系統都能見到嵌入式系統 的應用。與通用電腦系統可以滿足多種任務不同,嵌入式系統只能完成某些特定 目的的任務。但有些也有即時效能的制約因素必須得到滿足的原因,如安全性和 可用性。除此之外其他功能可能要求較低或沒有要求,使系統的硬體得以簡化,

以降低成本。對於大批次生產的系統來說,降低成本通常是設計的首要考慮。嵌 入式系統通常需要簡化去除不需要的功能以降低成本,設計師通常選擇剛剛滿足 所需功能的硬體使標的最小化低成本的實作。

嵌入式系統並非總是獨立的裝置。許多嵌入式系統是以一個部件存在於一個 較大的裝置,它為裝置提供更多的功能,使裝置能完成更廣泛的任務。例如,吉 布森吉他機器人採用了嵌入式系統來調弦,但總的來說吉布森吉他機器人設計的 目的絕不是調弦而是演奏音樂。同樣的,車載電腦作為汽車的一個子系統,為它 提供了導航,控制,車況反饋等功能。

部分為嵌入式系統編寫的程式被稱為韌體,他們儲存在唯讀記憶體或快閃記 憶體晶片。他們執行在資源有限的電腦硬體:小內部記憶體,沒有鍵盤,甚至沒 有螢幕。

使用者介面

嵌入式系統使用者介面包括了從沒有使用者介面,專註於單一任務到現在的類似 於現代桌面作業系統的複雜圖形使用者介面的各類介面。

簡單的嵌入式系統

簡單的嵌入式裝置往往由按鈕,發光二極體(LEDs)和僅僅能顯示小字元或數位 的顯示器,以及簡單的選單系統組成。

較為複雜的嵌入式系統

(4)

較為複雜的嵌入式系統擁有的完整的圖形螢幕、觸摸感應或螢幕邊緣按鈕在最大 限度地使用空間的同時,提供了足夠的靈活性:指點控制是很自然的非常理想的 操控方式,這樣的方式可以改變螢幕的意義。

手持系統通常都有一個螢幕和作為定位裝置的控制按鍵。

大部分嵌入式系統透過「維護」或者「測試」介面來提供一個選單,或者由一個 RS-232(序列資料通訊的介面標準)介面提供的命令列介面。這樣就可以在很少 的顯示花費的基礎上提供大量的控制手段。然而,這也會讓大部分消費者無法安 裝必要的電纜。

CPU 平台

在嵌入式系統設計中有許多不同的 CPU 架構,如 ARM、MIPS、Coldfire/68k、

PowerPC、X86、PIC、Intel 8051、Atmel AVR、Renesas H8、SH、V850、FR-V、M32R、

DMCU 等。

這與桌面電腦市場有所不同,至 2003 年為止在那個領域只有少數幾家競爭的架 構,其中主要是英特爾/AMDx86 和用於 Apple Macintosh 的 Apple/Motorola/IBM PowerPC。在桌面電腦領域,隨著對於 Java 接受程度的增長,軟體對於特定執行 環境的依賴越來越少。

PC/104 標準是小型、小批次嵌入式和 ruggedized 系統設計的基礎。這些系統通 常使用 DOS、Linux、NetBSD 或者如 QNX、Inferno 這樣的即時嵌入式作業系統。

大批次生產的嵌入式系統的通常配置是系統單晶片(en:System On Chip),它是 一個專用積體電路,CPU 是外購的智慧財產權並且添加到積體電路設計中。一個 類似的常用機制是使用可編程門陣列,所有的邏輯包括 CPU 部分都可以編程實 作。許多時髦的 FPGA 都是為這個目的設計的。

工具

同典型的電腦程式設計師一樣,嵌入式系統設計人員也使用編譯器、連結器和偵 錯程式開發嵌入式系統軟體。然而,他們也使用一些大多數程式設計師不熟悉的 工具。

軟體工具的來源有如下幾種:

專註於嵌入式系統市場的軟體公司

從 GNU軟體開發工具移植(參見交叉平台編譯)

(5)

有些情況下,如果嵌入式處理器與普通個人電腦處理器很近似的話也可以使 用個人電腦開發工具

嵌入式系統設計人員也使用一些不為普通電腦程式設計師所熟悉的軟體工具:

一個常用工具是「電路內部模擬器」(ICE,in-circuit emulator)或者是最新 設計中的嵌入式偵錯程式。這個偵錯工具是開發嵌入式程式的基本技巧。它代替 微處理器或者嵌入微處理器內部,提供了在系統中快速呼叫和偵錯試驗代碼的便 捷工具。一個焊點通常就是一個插入系統的特殊電路,通常使用一台連結到這些 焊點的個人電腦作為偵錯介面。

連結器通常是各種各樣(exotic)。對於大多數商業編程來說,連結器幾乎總 是最後才想起的(afterthough)部分,預設設定也從來不變。與此相反,嵌入式 連結器有完整、複雜的命令列語言是很普通的。經常有不同型別的內部記憶體,

分別保存特殊的代碼和資料。單獨的資料結構能夠放在特殊的位址,這樣軟體能 夠很方便地存取對映到內部記憶體的控制暫存器。嵌入式連結器經常有用於減小 代碼大小和執行時間的外部(exotic)最佳化工具。例如,他們可能移動子程式 的位置以使用較小的呼叫和跳轉指令。它們經常帶有管理 data overlays 和 band switch 技術的特性,這些技術是在嵌入式軟體經常使用的擴充功能廉價 CPU 的方 法。

另外一個常用的工具是一個在程式中添加代碼和或者 CRC 的工具程式(經常 是自己寫的),使用這個工具嵌入式系統能夠在執行程式之前先進行程式資料檢 查。

為數位訊號處理開發軟體的嵌入式程式設計師經常使用 MatchCad 或者 Mathematica這樣的數學工具進行數學模擬。

一些較少使用的工具有將資料檔案轉換成代碼的工具,使用這種工具就可以 在程式中包含任意型別的資料。

少數一些項目為了特殊的可靠性或者數位訊號處理要求使用同步程式語 言。

一些程式語言為嵌入式系統編程提供了一些特殊支援。

對於 C 語言,ISO/IEC TR 18037:2005 定義了 指定的位址空間

指定的儲存類

基本輸入輸出的硬體定址 偵錯

偵錯通常使用內部電路模擬器或者其他一些能夠在微控制器微碼(microcode)

(6)

內部產生中斷的偵錯程式。微碼中斷讓偵錯程式能夠在只有 CPU 工作的硬體中 進行操作,基於 CPU 的偵錯程式能夠從 CPU 的角度來測試和偵錯電腦的電路。

PDP-11 開創了這種特性的先河。

開發人員能夠仍然使用斷點、單步執行以及高階語言進行偵錯,在許多的偵錯工 具上都有這種能力。另外開發人員在偵錯即時事件順序的時候需要記錄、使用簡 單的記錄工具。

首先遇到這種問題的個人電腦和大型電腦程式設計師經常在設計優先順序和可 行方法的時候感到困惑。指導、代碼審查和非個人風格(egoless)的編程是值得 推薦的。

隨著嵌入式系統變得越來越複雜,更高層次的工具和作業系統逐漸移植到可行的 裝置上。例如,蜂窩電話、個人數位助理和其他的消費用電腦需要一些從個人或 者這些電子裝置製造商之外的公司購買或者提供的一些重要軟體。在這些系統中,

需要如 Linux、OSGi 或者 Java 這樣的開放編程環境,這樣第三方軟體提供上才能 夠在大規模的市場上銷售軟體。

大多數這樣的開發環境都有一個執行在個人電腦上的參考設計,這種軟體的絕大 部分都可以在傳統的個人電腦上開發。然而,從開放環境移植到專用的電子裝置 和電子裝置的驅動程式開發通常仍然是傳統的嵌入式系統軟體工程師的工作。在 有些情況下, the engineer works for the integrated circuit manufacturer, but there is still such a person somewhere.

作業系統

使用 Windows XP 的網際網路收費電話

嵌入式系統經常沒有作業系統、專用的嵌入式作業系統(經常是即時作業系統)

或者指定程式設計師移植到這些新系統。

啟動

嵌入式系統帶有啟動代碼,通常它禁止中斷、設定電子裝置參數、測試電腦(RAM、

CPU和軟體),然後開始應用程式執行。許多嵌入式系統從短暫的掉電狀態恢復,

經常重起而不進行最近的自檢。在十分之一秒內重起是常見的現象。

許多設計人員發現 LED 在指示錯誤狀態上非常有用,它們可以幫助進行故障處理。

一個常用的機制是在複位的時候點亮電子裝置所有的 LED 以表明供電和 LED 正常 工作;然後在進行加電自檢時由軟體改變 LED 的狀態;在此之後,軟體用這些 LED 指示操作過程中的正常或者故障狀態。這可以讓技術人員、工程師和使用者

(7)

了解系統的狀態。一個有趣的例外是電度表(electric power meters)和其他一些 大街上的東西,閃爍的指示燈是為了吸引注意力或者表示損壞狀態。

內部自檢

許多嵌入式系統都有一定程度或者一定數量的內部加電自檢,自檢有幾種型別:

電腦檢查:檢查 CPU、RAM 和程式記憶體。通常一加電就開始這些檢查,

在一些安全性非常重要的系統中,通常周期性地在安全時間間隔內進行自檢,或 者經過一段時間就進行自檢。

外圍裝置檢查:模擬輸入和讀入資料或者測量輸出資料。有大量的通訊、類 比和控制系統都有這些非常廉價的檢查。

電源檢查:通常測試每個供電電路,也可能檢查電池或者主電源輸入。通常 供電部分的負載都很重,並且少有餘量,所以這項檢查很有意義。

通訊檢查:驗證從相連單元接收到的簡單訊息,例如在網際網路上使用 ICMP 訊息「ping」。

電纜檢查:將線連結到待檢查的電纜上指示針進行檢查。如電話這樣的同步 通訊系統經常使用「同步」測試。電纜檢查成本很低,當單元部分有插頭的時候 這項檢查尤其重要。

裝備檢查:一個系統在安裝時經常需要進行調整,這項檢查就向安裝人員做 出狀態指示。

消耗檢查:檢查系統所消耗的東西、在預量太低時發出警告。最常見的例子 是汽車的油量表,最複雜的例子可能是維持化學反應物詳細狀態的自動醫學分析 系統。

執行檢查:檢查使用者關心的系統執行狀態。顯然,在系統執行時必須進行 這項檢查,這方面的檢查包括飛機上的導航儀器、汽車的速度表和磁碟的指示燈 等。

安全檢查:在'安全時限'內進行檢查確保系統仍然可靠。安全時限通常小於 能夠產生損害的最小時間。

可靠性體系

根據人們需求的不同可靠性也有不同的定義,有意思的事,可靠性的型別卻相對 較少,相似可靠性型別的系統使用相似型別的內在檢查和恢復方法:

系統非常不安全或者無法修理。這包括太空系統、水下電纜、導航燈塔、鑽 孔系統,非常奇怪的是還包括汽車和大規模生產產品。總的來說,嵌入式系統檢 測各個子系統、線上切換到冗餘部分或者工作在「limp 模式」提供部分的功能。

大規模生產的消費產品如汽車、個人電腦或者印表機也屬於這個類別,這是因為

(8)

與購買的費用相比維修費用高昂、維修人員又路途遙遠。

系統不能安全地停止執行。這包括飛機導航、反應控制系統、重要的化學工 廠安全控制、鐵路訊號、單發動機飛機的發動機,如上所述,但是「limp 模式」

較難容忍,通常需要操作員選擇備份系統。

系統停機時將會造成大量的金錢損失。這些包括電話交換機、工廠控制、橋 樑和電梯控制、資金轉移、市場開發、自動銷售和服務等,這些系統通常有一些 運轉/不運轉測試,它們通常帶有線上冗餘或者使用替換系統和人工過程的 limp 模式。

系統不安全的時候不能操作。同上面的情況類似,系統的執行將會造成大量 的金錢損失。醫療裝置、帶有發動機這樣的熱備份的飛行器、化學工廠控制、自 動股票交易、遊戲系統等。測試可能是五花八門,但是出錯時能夠做的就是停止 整個系統。

嵌入式軟體架構的型別

常用的嵌入式軟體架構有幾種不同的基本型別。

控制迴圈

在這種設計中,軟體有一個簡單的循環,這個循環調用各個子程式,每個子程式 管理硬體或者軟體的某一部分。中斷通常用來設置標記或者更新軟體其他部分能 夠讀取的暫存器。

系統使用簡單的 API 來完成允許和禁止中斷設置。如果處理得當的話,它能夠在 巢狀子程式中處理巢狀調用,在最外面的中斷允許巢狀中恢復前面的中斷狀態。

這種方法是實作 Exokernel 的一個最簡單的方法。

通常在循環中有一些子程式使用周期性的即時中斷控制一組軟體定時器,當一個 定時器時間到的時候就會執行相應的子程式或者設置相應的標誌。

任何可能發生的硬體事件都應該有軟體定時器的支援,硬體事件大概每萬億次出 現一次錯誤,對於現代的硬體來說大概是一年發生一次,對於以百萬計大規模生 產的設備來說,遺漏一個軟體軟體定時器在商業上可能是災難性的。

有時測試軟體執行一組基於軟體的安全定時器,它們周期性地複位硬體中的軟體 看門狗。如果軟體錯過一個事件,安全定時器軟體將會捕捉到它。如果安全定時 器出錯,看門狗硬體將會複位系統。

可以使用指向每個狀態機函式的指標實作狀態機,函式可以用 C++、C 或者組合

(9)

語言等實作。變化的狀態將不同的函式放到指標中,每次循環執行時都會執行函 式指標。

許多設計人員建議每個循環讀一次輸入輸出設備、並且保存得到的結果,這樣可 以保證邏輯過程的在一致的參數上執行。

許多設計人員喜歡將狀態機設計成每個狀態僅僅檢查一到兩項內容,通常是檢查 硬體事件和軟體定時器。

設計人員建議多級狀態機應該讓低層狀態機早於高層狀態機執行,這樣高層就能 夠根據正確的資訊執行。

如內部燃燒控制這樣的複雜功能通常根據多維表格進行處理,代碼通常進行查表 處理而不進行複雜的計算,為了減小表格的大小以及成本軟體可以在條目之間進 行差值運算。

在最小的微控制器中,尤其是只有 128 位元組堆疊的 8051 中,控制環允許好的 連接器使用靜態分配的數據覆蓋本地變數。在這種機制中,離子程式調用樹末端 越近的變數得到的記憶體位址越高。當開始一個新的分支的時候,它的變數可以 在以前分支遺棄的空間中進行重新分配。

簡單控制迴圈的一個主要缺點是它無法保證響應特定硬體事件的時間。

細心的設計可以很容易地保證中斷不會被長時間禁止,這樣中斷代碼就可以在非 常精確的時間執行。

控制環的另外一個主要缺陷是增加新的特性的時候會變得複雜。需要花費很長時 間的演算法必須小心地進行分解以使得每次只有一小部分在主循環中執行。

這種系統的優勢是它的簡單性,並且在很小的軟體上,循環執行地很快幾乎沒有 人關心它是不可預測的。

它的另外一個優勢是這種系統保證執行軟體的質量,無法將不好的執行結果歸咎 為其他的作業系統。

非搶先式任務

非搶先式任務系統非常類似於上面的系統,只是這個迴圈是隱藏在 API 中的。我 們定義一系列的任務,每個任務獲得自己的子程式棧;然後,當一個任務空閒的

(10)

時候,它呼叫一個空閒子程式(通常呼叫「暫停」、「等候」、「交出(yield)」等 等)。

帶有類似屬性的架構都帶有一個事件佇列,有一個迴圈根據佇列列表中的一個域 確定刪除時間和呼叫子程式。

這種架構的優點和缺點都非常類似於控制環,只是這種方法添加新的軟體更加簡 單,只需要簡單地編寫新的任務或者將它添加到佇列直譯器中。

[编辑] 搶先式定時器

使用上面的任何一種系統,但是添加一個按照定時器中斷執行子程式的定時器系 統,這樣就給系統添加了嶄新的能力,這樣定時器子程式第一次能在一個有保證 的時間內執行。

另外,代碼第一次能夠在非預期的時間存取自己的資料結構。定時器子程式必須 要象中斷子程式一樣進行處理。

搶先式任務

使用上面的非搶先式任務系統,從一個搶先式定時器或者其他中斷執行。

這樣系統就突然變得很不一樣了。任何一個任務的代碼都有可能損害其他任務的 資料 &emdash; 所以它們必須進行切缺的切分。對於共享資料的存取必須使用 一些同步策略進行控制,如訊息佇列、訊號燈或者非阻塞同步機制。

經常在這一步開發組織就會購買一套即時作業系統。如果一個組織缺少能夠編寫 作業系統的人才或者作業系統將要在幾個產品之上,這可能是一個明智的選擇。

這通常要將開發計劃增加六倒八周,and forever after programmers can blame delays on it.

微核心與外核心

這種方法試圖將系統組織得比單核心更易於配置,而同時提供類似的特點。

微核心是即時作業系統的一個邏輯發展,通常的組織方式是作業系統核心分配內 部記憶體並且將 CPU 在不同的緒程之間進行切換。使用者模式的行程實作如檔 案系統、使用者介面等主要的功能。

微核心在二十世紀五十年代開始首次嘗試,但是由於電腦在任務間切換以及在任 務間交換資料速度非常緩慢,所以人們放棄了微核心而鍾情於 MULTICS 和 UNIX

(11)

風格的大核心。總體上來說,微核心在工作切換以及任務間通訊速度快的時候是 比較成功的,在速度慢的時候是失敗的。

外核心透過使用普通的子程式呼叫獲得的通訊效率很高,硬體以及系統中的軟體 都是程式設計師能用也能擴充功能的。資源核心(可能是庫的一部分)分配 CPU 時間、內部記憶體以及其他資源。如多工、網路以及檔案系統這樣的大核心特性 透過代碼庫來提供。庫可以進行動態的連線、擴充功能或者共享。不同的應用甚 至可以使用的不同的庫,但是所有的資源都來自於資源核心。

虛擬機器

一些航空電子系統使用幾個商用電腦。這樣更進一步,每個電腦都在類比它們自 身的幾個副本,重要的程式同時在幾個電腦上執行並且進行投票控制(:en:

vote)。

類比環境的優點就是即使一個電腦出現故障,軟體的不同常式能夠遷移到正常工 作的軟體分割,表決的票數並不受影響。

通常虛擬軟體執行在電腦的使用者模式下,它捕捉、類比硬體存取和不在使用者 模式下執行的指令。

檢查點計算

另外一種常用的機制是兩個電腦計算 for a bit,然後將它們的計算結果報到那個 點上。如果一個電腦的計算是 nut,它就會被關閉。

辦公用(單核心)作業系統

這種系統通常在沒有系統經費的嵌入式項目中流行,但是從這篇文章的多個作者 來看,這通常是不正確的,它們的邏輯是:

作業系統是經過特殊封裝的重用代碼庫。如果這些代碼有用,設計人員就會 節省時間和金錢,否則它們就是無用的。

商務系統的作業系統沒有嵌入式硬體的介面。例如,如果要用 Linux 寫一個 馬達控制器或者電話交換機,絕大部分的實際控制操作都是 IOCTL 呼叫,同時,

正常的讀、寫和查詢介面都是無用的。所以作業系統對於實際的開發妨礙很大。

大多數的嵌入式系統不處理辦公事務,所以辦公作業系統的大部分代碼都被 浪費了。例如,絕大多數的嵌入式系統從來都不使用檔案系統或者螢幕,所以檔 案系統和圖形使用者介面部分就是浪費的,這些不用的代碼只會影響系統的可靠 性。

辦公用作業系統保護硬體不讓使用者程式操作,這就嚴重地妨礙了嵌入式開

(12)

發工作。

作業系統必須移植到嵌入式系統上,也就是說,硬體驅動程式無論如何都必 須重寫,這也是作業系統最難的部分,所以使用這樣的作業系統幾乎沒有功效。

作業系統真正有用、可移植的特性是小段代碼。例如,一個基本的 TCP/IP 介面大約有 3000 行代碼,另外的一個例子是大約同樣大小的簡單檔案系統。如 果設計需要這些代碼,能夠使用少於嵌入式系統開發 10%的經費就能完成,不需 要支付版權費用,只需要簡單地重寫就可以了。如果系統這些代碼有足夠的通用 性,嵌入式系統雜誌封面的後面通常有公司銷售沒有版權費的 C 語言實作代碼。

然而許多工程師並不認同這一點,嵌入式 Linux 越來越受到人們的歡迎,尤其是 在無線路由器和全球定位系統這樣的功能強大的嵌入式系統中。其中有下面一些 原因:

有現成的移植到普通嵌入式晶片的實作代碼。

它們允許重用公開獲得的裝置驅動程式、網頁伺服器、防火牆或者其他代 碼。

開發系統能夠從許多特性組合開始,在釋出的時候可以剔除不需要的功能,

從而節約所消耗的內部記憶體。

許多工程師認為在使用者模式執行應用程式更為可靠、更容易偵錯,所以開 發過程更容易、代碼更易於移植。

許多嵌入式系統沒有控制系統那樣對於即時性的嚴格要求,對於許多應用來 說如嵌入式 Linux 這樣的系統的響應速度就已經足夠了。

要求更快的響應速度,而不是可靠性的特性,通常放到了硬體上。

許多即時作業系統都針對每件產品收取費用,當產品是消費品時,這項費用 是巨大的。

Exotic custom 作業系統

一些系統需要安全、及時、可靠或者高效的特性,上面的架構卻無法達到,構建 這樣的系統有一些廣為人知的技巧:

僱傭一個真正的系統程式設計師。他們的花費很小,但是能夠節約數年的偵 錯以及相關的收入損失。

RMA (rate monotonic analysis),可以用來評估一組任務能否在特定的硬體 系統下執行,在最簡單的形式下,設計人員保證最快完成的任務有最高的優先順 序,平均來說 CPU 至少有 30% 的空閒時間。

和諧的任務能夠高效地最佳化 CPU。基本上來說,設計人員保證每件工作都 是從 heartbeat timer 開始工作的。在即時作業系統上很難這樣做,因為它們在等

(13)

候輸入輸出裝置的時候通常就會切換任務。

剛好有兩個優先順序(通常是執行和禁止中斷)的系統不能出現高優先順序 任務等候低優先順序任務釋放訊號燈或者其他資源的優先順序倒置問題,

有監視器(monitor)的系統不能出現死鎖。監視器鎖住一段代碼禁止中斷 和其他搶先任務。如果這個監視器只用於一小段快速執行的代碼,系統可能工作 正常。如果能夠證明監視器 API 在所有情況下都能夠完整執行,例如僅僅禁止 中斷,那麼就不會產生系統掛起的情況。

這就意味著使用兩個優先順序和監視器的系統是安全、可靠的,因為它們沒有死 鎖和優先順序倒置的問題。如果監視器能夠執行到結束,那麼就永遠不會掛起。

如果使用和諧的任務,可能還會相當高效。然而,RMA 無法描述這些系統,優 先順序最好也不要到處都有,其中包括作業系統和硬體。

參考文獻

相關文件

有些圖存在平面嵌入, 有些圖則不存在 平面嵌入。 例如 Petersen 圖就不存在平面嵌 入。 也就是 說, 不管你怎麼畫, 總有兩條邊會 交叉。 (注: 所謂把圖畫在平面上, 即是用點 來代

(A)因為用 Terminal Services 可以不用安裝 ERP 的程式在 Client 端上可以減少 MIS 維護系 統的時間(B)沒有防毒軟體 (C)建置防火牆的系統 (D) APP-Server 與 DB

and Chang, K.-A., Simulation of free-surface waves in liquid sloshing using a domain type-meshless method, International Journal for Numerical Methods in Fluids, 67, 269-288, 2011..

17.薩提爾(Virginia Satir)家族治療模式之親職教育是基於「家庭系統觀」 ,認為個體有問題是因 其家庭系統「生病」 ,所以治療的對象是整個家庭關係(系統)

物件導向分析與設計 無線網路概論 無線網路概論 無線網路概論 無線網路概論 手持式裝置程式設計 手持式裝置程式設計 手持式裝置程式設計 手持式裝置程式設計

微算機基本原理與應用 第11章

application in audio-visual media of

形式語言 編譯程式 設計 線性代數 離散數學 資料結構. 與演算法下 資料庫系統 系統程式 作業系統