嵌入式系統/嵌入式系統簡介
嵌入式技術現已進入黃金時期,可用的知識財富令人驚歎。然而,大多數嵌入式系統工程師都有一個共同的抱怨。網際網路上沒有關於該技術的各種設計和實現問題的全面資源。許多公司的智慧財產權規定部分是造成這種情況的原因,以及將技術訣竅保留在一個受限的研究人員群體中的趨勢。
在開始閱讀本書的其餘部分之前,首先了解嵌入式系統到底是什麼以及它們是如何使用的非常重要。本維基百科將嘗試涵蓋大量主題,其中一些主題僅適用於嵌入式系統,但另一些主題將適用於幾乎所有計算機(嵌入式或其他)。因此,本書中的一些材料可能會與其他側重於低階計算、組合語言、計算機體系結構等主題的維基百科的材料重疊。但我們首先從基礎開始,並在本書真正開始之前嘗試回答一些問題。
需要首先提出的第一個問題是,“嵌入式計算機究竟是什麼?”嵌入式計算機通常是指為特定目的而實現的計算機。相比之下,普通PC計算機通常用於多種目的:檢查電子郵件、上網、聽音樂、文字處理等…然而,嵌入式系統通常只有一種任務,或者只有很少的幾個與它們被程式設計執行的任務相關的任務。
每個家庭都有幾個嵌入式計算機的例子。例如,任何帶有數字時鐘的家用電器都配備了一個小型嵌入式微控制器,除了顯示時鐘之外,它不執行任何其他任務。現代汽車配備了車載嵌入式計算機,使用來自許多不同感測器的輸入來控制諸如點火正時和防抱死制動等功能。
然而,嵌入式計算機很少具有通用介面。即使嵌入式系統具有鍵盤和液晶顯示屏,它們也幾乎無法使用許多不同型別的輸入或輸出。一個具有I/O功能的嵌入式系統的例子是帶液晶狀態顯示屏和用於輸入密碼的鍵盤的安全警報系統。
一般來說,嵌入式系統:它是執行特定任務的硬體和軟體的組合。
- 是一個構建用於執行其職責的系統,完全或部分獨立於人工干預。
- 是專門設計以最有效的方式執行少量任務的系統。
- 與我們環境中的物理元素互動,例如控制和驅動電機、感測溫度等。
嵌入式系統可以定義為旨在執行特定任務的控制系統或計算機系統。嵌入式系統的常見示例包括MP3播放器、飛機上的導航系統和入侵警報系統。嵌入式系統也可以定義為單用途計算機。
大多數嵌入式系統都是時間關鍵型應用,這意味著嵌入式系統工作在一個時間非常重要的環境中:操作的結果只有在特定時間範圍內發生時才相關。飛機上的自動駕駛儀就是一個時間關鍵型嵌入式系統。如果自動駕駛儀檢測到飛機由於某種原因即將失速,那麼它應該在幾毫秒內採取措施進行糾正,否則將產生災難性的後果。
當在微處理器和少量硬體上以軟體方式設計的產品的實施成本低於、更可靠或由於其他某些原因優於離散硬體設計時,就會考慮使用嵌入式系統。一個小型且相對便宜的微處理器可以替代數十甚至數百個硬體邏輯閘、定時電路、輸入緩衝器、輸出驅動器等。同樣,一個具有標準輸入和輸出配置的通用嵌入式系統只需更改軟體即可以完全不同的方式執行。
嵌入式系統的用途實際上是無限的,因為每天都有新產品進入市場,這些產品以新穎的方式利用嵌入式計算機。近年來,諸如微處理器、微控制器和FPGA晶片等硬體變得越來越便宜。因此,在實現新的控制形式時,明智的做法是購買通用晶片併為其編寫自己的自定義軟體。生產定製晶片以處理特定任務或任務集的成本要高得多。許多嵌入式計算機甚至帶有豐富的庫,因此“編寫自己的軟體”實際上變得非常簡單。
從實現的角度來看,計算機和嵌入式系統之間存在主要區別。嵌入式系統通常需要提供即時響應。即時系統被定義為其正確性取決於其響應及時性的系統。此類系統的示例包括飛機的飛行控制系統、核反應堆和發電廠中的感測器系統。對於這些系統,響應延遲是一個致命錯誤。即時系統的更寬鬆版本是及時響應且延遲很小的版本是可以接受的。此類系統的示例將是鐵路站臺上的排程顯示系統。在技術術語中,即時系統可分為
- 硬即時系統 - 對響應及時性有嚴格約束的系統。
- 軟即時系統 - 可以容忍響應時間略有變化的系統。
- 混合即時系統 - 對其效能表現出硬約束和軟約束的系統。
嵌入式計算機可能經濟實惠,但它們常常容易出現一些非常具體的問題。PC計算機可能會附帶軟體故障,一旦發現,通常可以釋出軟體補丁來解決問題。然而,嵌入式系統通常只編程一次,並且軟體無法打補丁。即使可以在嵌入式系統上修補有故障的軟體,該過程對於使用者來說也經常過於複雜。
嵌入式計算機的另一個問題是,它們通常安裝在可靠性不容有失的系統中。例如,控制汽車制動的計算機在任何情況下都不能允許發生故障。導彈中的目標計算機不允許發生故障並意外地攻擊友軍。因此,在將生產軟體拼湊在一起時使用的許多程式設計技術不能用於嵌入式系統。在晶片離開工廠之前必須保證可靠性。這意味著每個嵌入式系統都需要經過廣泛的測試和分析。
與臺式電腦等成熟的計算系統相比,嵌入式系統將擁有非常少的資源。嵌入式系統的記憶體容量和處理能力有限。與為桌上型電腦系統開發應用程式相比,開發嵌入式系統更具挑戰性,因為我們正在為非常受限的環境開發程式。一些嵌入式系統執行名為RTOS(即時作業系統)的縮減版作業系統。
嵌入式系統每天都在我們的生活中扮演著重要的角色,即使它們不一定可見。我們每天使用的一些嵌入式系統控制著電視上的菜單系統、微波爐中的定時器、手機、MP3播放器或任何其他內建一定智慧的裝置。事實上,最近的民意調查資料顯示,美國目前嵌入式計算機系統的數量超過了人類的數量。嵌入式系統是一個快速發展的行業,其中發展機會眾多。
本書旨在配合計算機工程課程學習使用。但是,本書對於任何對計算機感興趣的讀者也同樣有用,因為它可以作為計算機“自底向上”學習的起點。學習小型、受限、簡單的計算機比一開始就學習我們日常使用的龐大PC巨頭要容易得多。本書涵蓋的許多主題也將是軟體主題,因此,本書對至少具有一定程式設計背景(尤其是C語言和組合語言)的人最有幫助。具備半導體和電子電路的先驗知識將是有益的,但不是必需的。
本書將主要關注嵌入式系統,但讀者需要理解兩個簡單的事實
- 本書在沒有對微處理器架構進行一般性討論的情況下無法深入進行。
- 本書中討論的許多概念同樣適用於臺式計算機,甚至比嵌入式計算機更適用。
為了完整起見,本書將涵蓋一些與所有計算機普遍相關的內容。本書中的許多課程甚至比嵌入式系統工程師更適合臺式計算機程式設計師應用。也許更準確地說,本書更多地是關於“低階計算”,而不是“嵌入式系統”。
當然,本書也會涵蓋許多在臺式計算機程式設計中無關緊要的嵌入式系統主題,例如交叉編譯器、即時作業系統、EEPROM儲存、程式碼壓縮、位邦定序列埠、臍帶式開發等等。
閱讀本書後,可以繼續學習許多潛在的領域。
- 對於對作業系統和硬體軟體介面感興趣的人,請閱讀作業系統設計華夏公益教科書。
- 對於對C語言程式設計或組合語言程式設計感興趣的人,請分別參考程式設計:C和X86彙編華夏公益教科書。
- 對於對數字控制系統感興趣的人,將來會有一本關於該主題的書(可程式設計邏輯)
- 對於對數字訊號處理感興趣的人,將來會有一本關於該主題的書。
- 對於對更高階計算機系統進一步研究感興趣的人,將來會有一些關於計算機硬體和微處理器的書籍(微處理器設計)
- 對於對更底層的電子學理解感興趣的人,請參考數位電路。
- 維基versity:小型資訊系統學院是一個課程,其中包括在FPGA上執行Java。
- 對於對設計運動控制系統感興趣的人,即計算機控制的機器,如機器人、機床、汽車、公共汽車、飛機、船舶、衛星、望遠鏡等,請參考嵌入式控制系統設計。
我們試圖使本華夏公益教科書語言中立。當所有嵌入式計算機都不能用一種語言程式設計時,專注於一種語言是不公平的。
但是,在某種實際語言中擁有功能性的示例程式碼是很好的。此外,指出某些流行程式語言對嵌入式系統特別重要的特性也很有用。
- ANSI C程式語言:許多微處理器和微控制器可以用C語言程式設計,並且存在許多用於此目的的C交叉編譯器。C可能是新嵌入式系統開發中最常用的語言。“volatile”關鍵字在桌面應用程式程式設計中很少使用,但在嵌入式系統/C程式設計中變得非常重要。
- 最初由國防部為即時作業系統和嵌入式系統開發的Ada,其設計具有多處理器支援和強大的編譯時檢查,以確保開發系統的質量和完整性——許多微控制器可以用Ada進行程式設計,因為GNAT Ada編譯器是經常移植的GNU編譯器集合的一部分,儘管文件通常不如其他更流行的語言(如C)那樣可用。
- 組合語言:有許多不同的微控制器系列,每個系列都有自己的組合語言,並具有其獨特的特性。本書將介紹大多數微控制器通用的組合語言基礎知識。與桌面應用程式程式設計不同,嵌入式系統程式通常必須設定“中斷向量表”。
- 本書將討論(至少簡要地)一些多語言程式設計技術(特別是C語言和組合語言)。
- 在某些情況下,微控制器最好用不同的語言進行程式設計(BASIC和Forth就想到)。
- 有些控制器甚至用它們自己的專有語言進行程式設計(例如PIC Basic和Dynamic C)。
- 一些非常著名的語言,如C++和Java,在嵌入式系統中很少使用,因為C++和Java編譯器在流行的微控制器中根本不可用。但是,本書可能會偶爾描述如何在不支援這些語言的環境中實現C++和Java特性。
- 一些流行的微控制器可以使用Python編譯器。Pyastra [1]可以編譯所有Microchip PIC12、PIC14和PIC16微控制器。PyMite [2]可以編譯“AVR系列中任何至少具有64 KiB程式儲存器和4 KiB RAM的裝置”。PyMite也針對(某些)ARM微控制器。請注意,這些嵌入式Python編譯器通常只能為這些裝置編譯Python語言的一個子集。
進一步閱讀