本節書摘來自異步社群《嵌入式c程式設計實戰》一書中的第1章,第1.1節,作者【瑞典】lars bengtsson(本特松) , lennart lindh(林德), 李華峰 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
圖1.1為兩台不同的計算機。

大部分人看到圖1.1後,立刻就可以認出左邊的機器是一台計算機。不過,幾乎沒有人會把右側的機器看作是計算機,事實上,它确實是一台貨真價實的計算機。這兩台看起來截然不同的計算機最根本的差別在于,右側的計算機是嵌入在洗衣機内部的。
如果你認識到這兩者的差異,就可以将計算機分成通用計算機和嵌入式計算機兩類。
1.通用計算機
通用計算機指的是桌上型電腦、筆記本電腦以及工作站等。通用計算機(幾乎)總是配有鍵盤、顯示裝置、硬碟驅動器,以及用來連接配接網際網路的以太網卡這些裝置。這些通用計算機都進行了優化,以便運作windows或者mac os之類的(非實時的)作業系統。
2.嵌入式計算機
嵌入式計算機也可以擁有上述的這些裝置,但通常他們與此不同。嵌入式計算機要被安裝在被控系統的内部。設計嵌入式計算機的目的是用來專門完成一個(或者幾個)任務。圖1.1中右邊的計算機就是被設計用來實作多個不同的洗衣程式。是以,這台計算機上不是用來運作windows作業系統的,更不可能被用來玩魔獸世界了。但這并不能改變它是一台計算機的事實,它有着一顆計算機的“心”,這顆“心”由cpu、存儲器和一些輸入/輸出單元構成。
由于嵌入式計算機是具有特定功能的專用計算機,是以當和通用計算機進行參數方面的比較時,嵌入式計算機顯得弱的可憐。無論是兆赫(mega hertz,mhz)、記憶體空間(以gb計)、每秒百萬個浮點操作(million floating-point operations per second,mflops),或者資料傳輸速率(以gbit/s計)這些名額的哪一項,兩者都無法相提并論。嵌入式計算機在成本和功耗方面都進行了優化。誰都不會需要使用一個主頻高達5ghz的英特爾酷睿處理器和一個存儲容量達到5tb的硬碟組成的通用計算機來控制洗衣機,因為這樣做意味着巨大的浪費(費用和能源上的)。通用系統和嵌入式系統的關系如圖1.2所示。
不過,無論是通用計算機,還是嵌入式計算機,都具有相同的工作原理,它們都是計算機,兩者之間的差異僅在于“規模”。
我們很難給出一個讓所有人都能滿意的關于嵌入式系統的定義。但是,我們對于這個系統定義現在已經取得了一些共識。下面列出的這些應用就是常見的嵌入式系統。
工業系統:工業機器人、控制系統等。
汽車系統:abs刹車、傳輸控制等。
醫療儀器控制:掃描器,植入心髒螢幕等。
數位裝置控制:cd播放器、電視遙控器、可程式設計的自動噴水滅火裝置、家用電器等。
下面列出的系統都不能歸類到嵌入式系統。
用來進行資料處理的計算機系統。
運作在pc或者unix計算機上的軟體系統。
用于傳統的商業或者科學應用的系統。
本書對嵌入式系統的定義如下:
嵌入式系統指的是專門的軟體、硬體和接口的集合,目的是用來執行特定的任務(如運作一台洗衣機等)。
當對嵌入式系統和通用系統計算機的産品數量進行比較時,通用系統計算機在市場上占有的比例還不到計算機總量的0.5%。一個普通的家庭(這裡指的是西方國家)通常會擁有30個以上的嵌入式計算機和兩個通用型計算機。單是一個現代化的汽車,就包含了40~50個嵌入式計算機(發動機控制、溫度控制、燃油噴射系統、安全氣囊控制、座椅加熱、測量燃油液位、速度、轉速、雨水傳感器等)。
圖1.3給出了一個嵌入式計算機系統元件的執行個體。
大多數情況下,一個嵌入式計算機系統并不會包含大型的元件,取而代之的是大量的小型元件。
下面列出了一些這種類型的元件。
傳感器(如按鈕)。
執行器(如燈)。
a/d和d/a轉換器。
人機互動界面。
與此相比,典型的通用計算機硬體組成部分為硬碟驅動器、以太網接口、顯示裝置、鍵盤以及滑鼠。
作者點評:時至今日,已經無法在通用計算機和嵌入式計算機之間劃出一條明确的界限了。打個比方,你能準确地告訴我ipad或者智能手機是通用計算機,還是嵌入式計算機嗎?
下面是一些常用的術語:
美國國家标準協會c标準(american national standards institute c,ansi c)
ansic是美國國家标準協會對c語言标準制定的規範。
應用程式程式設計接口(application programming interface,api)
api是由作業系統或者庫檔案提供的源代碼接口,可以被調用,以此支援一些計算機程式發起的服務請求。
中央處理單元(central processing unit,cpu)
中央處理單元可以是任何一個符合如下定義的硬體。首先,它必須能夠處理資料;其次,它必須能控制必要的資源對這些資料進行處理。例如,對兩個數求和,cpu就需要讀取這兩個數,然後将它們添加到一個處理電路(如alu)中,最後将得到的結果寫回。
gnu編譯器套件(gnu compiler collection,gcc)
由gnu開發的程式設計語言編譯器集合,可以用來處理多種程式設計語言。
gnu并不等同于unix(gnu is not unix,gnu)
gnu是一個完全由自由軟體構成的計算機作業系統。開發gnu的項目被稱作gnu計劃。
圖形使用者界面(graphical user interface,gui)
一種使用者界面,通過它可以實作人類與計算機之間以圖形化的圖示方式進行互動。
人機界面(human machine interface,hmi)
人機界面用來實作人與機器之間的互動。
微處理器(microprocessor,μp)
微處理器是一種通用裝置,它包含着alu,也就是算術邏輯單元和控制單元。微處理器通常都是內建在單個晶片上的獨立裝置,相比微控制器,它包含了更多的資源,并用來完成複雜運算。
微控制器(microcontroller,μc)
微控制器擁有一套完整計算機系統“內建”的所有必須單元。微控制器可以被稱為“單晶片解決方案”。它通常包括了中央處理單元(cpu)、ram、eprom/prom/rom、i/o外設、定時器、中斷控制器。微控制器可以被認為是一種特殊形式的更通用的微處理器。它專門用來控制運算複雜度較小的應用程式。
通用串行總線(universal serial bus,usb)
通用串行總線用來實作和外部裝置通信的通用串行總線标準的接口技術。