1. 程式人生 > >微控制器和嵌入式設計的區別

微控制器和嵌入式設計的區別

微控制器和嵌入式,其實沒有什麼標準的定義來區分他們,對於進行過微控制器和嵌入式開發的開發者來說,都有他們自己的定義,接下來,就談談本人對這兩個概念的理解和感悟。

首先明確概念,什麼是微控制器,微控制器是一種積體電路晶片,是採用超大規模積體電路技術把具有資料處理能力的中央處理器CPU、隨機儲存器RAM、只讀儲存器ROM、多種I/O口和中斷系統、定時器/計數器等功能(可能還包括顯示驅動電路、脈寬調製電路、模擬多路轉換器、A/D轉換器等電路)整合到一塊矽片上構成的一個小而完善的微型計算機系統,在工業控制領域廣泛應用。從上世紀80年代,由當時的4位、8位微控制器,發展到現在的300M的高速微控制器。

比如最經典的51

系列微控制器,如下圖所示,外觀只是一塊一個拇指大小的長方體晶片,共40個引腳,裡面包含了邏輯運算單元。實際上也就是一個cpu


    在最開始接觸微控制器的時候,還曾經有過一個疑問,為什麼微控制器是黑色的而不可以是別的顏色,後來才知道是微控制器材料的限制。

    對微控制器而言,其實一個晶片就是全部,其他的比如微控制器最小系統都是為了微控制器的正常運作而加入其他元件,比如晶振,5v電源,電感電阻等。當然最小系統只能保證微控制器正常執行,幾乎實現不了基於微控制器的任何應用。為了使微控制器實現應用,必須要加入其他外設。比如按鍵,led燈,led屏,蜂鳴器,各種sensor。這也就是市面上很多公司都在做的微控制器開發板。

    總結,微控制器就是完成運算、邏輯控制、通訊等功能的單一模組。也就是微控制器真的姓“單”。DSP晶片也可以認為是一個微控制器。當然它們效能很強大,但是功能依然很單一,總之就是處理資料、邏輯。

     那麼什麼是嵌入式呢,一般說嵌入式都是指嵌入式系統,嵌入式系統是將應用程式、作業系統、和計算機硬體在一起的系統,是指以應用為中心,以計算機技術為基礎,軟硬體可裁剪,其針對的使用者應用對功能、可靠性、成本、體積、功耗和使用環境有特殊要求的專用計算機系統。IEEEInstituteof Electrical and ElectronicsEngineers,美國電氣和電子工程師協會)對嵌入式系統的定義:“用於控制、監視或者輔助操作機器和裝置的裝置”。

     嵌入式系統是一種專用的計算機系統,作為裝置或裝置的一部分。通常,嵌入式系統是一個控制程式儲存在ROM中的嵌入式處理器控制板。事實上,所有帶有數字介面的裝置,如手錶、微波爐、錄影機、汽車等,都使用嵌入式系統,有些嵌入式系統還包含作業系統,但大多數嵌入式系統都是由單個程式實現整個控制邏輯。這是因為嵌入式系統一般用於工業控制,也就是說對外設的控制都是寫死的,並不需要人工干預,同時也為了保證系統的穩定和可靠。

     我們經常可以聽到公司招聘的要求是嵌入式軟體工程師或者嵌入式硬體工程師,也就是說嵌入式系統包括軟體和硬體,其實仔細想想也能明白,都已經跑系統了,當然有軟體也有bsp硬體啦。也就是說嵌入式系統是軟硬體結合體,國內普遍認同的嵌入式系統定義為:以應用為中心,以計算機技術為基礎,軟硬體可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。

接下來將嵌入式分成硬體和軟體詳細說明。

硬體層

     硬體層中包含嵌入式微處理器、儲存器(SDRAMROMFlash等)、通用裝置介面和I/O介面(A/DD/AI/O等)。在一片嵌入式處理器基礎上新增電源電路、時鐘電路和儲存器電路,就構成了一個嵌入式核心控制模組。其中作業系統和應用程式都可以固化在ROM中。

     其中核心就是微處理器,嵌入式處理器和一般的電腦cpu還有區別,嵌入式微處理器大多工作在特定設計的系統中,比如TI或者Atmel公司都有很多定位不同的處理器,atmelSAM系列是專門為物聯網設計的,AVR則由於效能十分突出,廣泛應用於工業領域。

      嵌入式微處理器有各種不同的體系,即使在同一體系中也可能具有不同的時鐘頻率和資料匯流排寬度,或集成了不同的外設和介面。據不完全統計,全世界嵌入式微處理器已經超過1000多種,體系結構有30多個系列,其中主流的體系有ARMMIPSPowerPCX86SH等。但與全球PC市場不同的是,沒有一種嵌入式微處理器可以主導市場,僅以32位的產品而言,就有100種以上的嵌入式微處理器。嵌入式微處理器的選擇是根據具體的應用而決定的。

     比如arm公司有各種各樣的處理器架構,最經典的cortex系列,它屬於ARMv7架構,這是到2010年為止ARM公司最新的指令集架構。ARMv7架構定義了三大分工明確的系列:“A”系列面向尖端的基於虛擬記憶體的作業系統和使用者應用;“R”系列針對實時系統;“M”系列對微控制器。下圖就是cortex系列的不同定位。


      在嵌入式領域,可以說arm架構的處理器佔據了半壁江山,而arm公司也成為著名的科技公司,而它卻沒有生產任何處理器,而只是提供了IP,可以看出一流公司做標準。而其他用的比較多的架構就是sparcpowerpc等。

      嵌入式系統和外界互動需要一定形式的通用裝置介面,如A/DD/AI/O等,外設通過和片外其他裝置的或感測器的連線來實現微處理器的輸入/輸出功能。每個外設通常都只有單一的功能,它可以在晶片外也可以內建晶片中。外設的種類很多,可從一個簡單的序列通訊裝置到非常複雜的802.11無線裝置。

     嵌入式系統中常用的通用裝置介面有A/D(模/數轉換介面)、D/A(數/模轉換介面),I/O介面有RS-232介面(序列通訊介面)、Ethernet(乙太網介面)、USB(通用序列匯流排介面)、音訊介面、VGA視訊輸出介面、I2C(現場匯流排)、SPI(序列外圍裝置介面)和IrDA(紅外線介面)等。這一點其實和微控制器類似。

軟體層:

也就是作業系統了,包括核心和檔案系統,還有就是更為頂層的應用程式,嵌入式作業系統一般都是Linux或者其他類Unix,還有一些實時作業系統(RTOS)比如VxWorksRTEMSucOS等。

其中Linux還包括不同的distribution,比如UbuntuRedhatDebiancentos等,他們都是採用Linux的核心,不同的是上面的softwaretools,當然不用太過於擔心標準問題,這些Linux發行版選擇的軟體幾乎都是比較通用的,比如網頁伺服器的Apache、電子郵件伺服器的postfixsendmail、檔案伺服器的Samba等。此外還有Linuxstandard base等標準來規範開發者。

Unix主要是FreeBSD以及Solaris等。

嵌入式領域最常用的還是一些實時作業系統,實時作業系統的核心就是實時性,本質就是任務處理所華為時間的可預測性,即任務需要在規定內時限內完成。IEEE對實時系統的定義是“那些正確性不僅取決於計算的邏輯結果也取決於產生結果所花費時間的系統”。實時作業系統有硬實時和軟實時之分,硬實時要求在規定的時間內必須完成操作,這是在作業系統設計時保證的;軟實時則只要按照任務的優先順序,儘可能快地完成操作即可。我們通常使用的作業系統在經過一定改變之後就可以變成實時作業系統。

那麼實時作業系統和Linux這種分時作業系統的區別列舉如下:

1)多路性。實時資訊處理系統與分時系統一樣具有多路性。系統按分時原則為多個終端使用者服務;而對實時控制系統,其多路性則主要表現在經常對多路的現場資訊進行採集以及對多個物件或多個執行機構進行控制。

2)獨立性。實時資訊處理系統與分時系統一樣具有獨立性。每個終端使用者在向分時系統提出服務請求時,是彼此獨立的操作,互不干擾;而在實時控制系統中資訊的採集和對物件的控制,也彼此互不干擾。

3)及時性。實時資訊系統對實時性的要求與分時系統類似,都是以人所能接受的等待時間來確定;而實時控制系統的及時性,則是以控制物件所要求的開始截止時間或完成截止時間來確定的,一般為秒級、百毫秒級直至毫秒級,甚至有的要低於100微秒。

4)互動性。實時資訊處理系統具有互動性,但這裡人與系統的互動,僅限於訪問系統中某些特定的專用服務程式。它不像分時系統那樣能向終端使用者提供資料處理服務、資源共享等服務。

5)可靠性。分時系統要求系統可靠,相比之下,實時系統則要求系統高度可靠。因為任何差錯都可能帶來巨大的經濟損失甚至無法預料的災難性後果。因此,在實時系統中,採取了多級容錯措施來保證系統的安全及資料的安全。

由於更加可靠和及時。嵌入式實時作業系統更加廣泛應用於工業控制、航空航天、軍工等領域,比如美國航天局NASA近幾年發射的火星探測器等都是採用的RTEMS實時作業系統。

中間層:

所謂的中間層就是軟體層和硬體層之間的介面層,其實嚴格而言也屬於軟體層。一般開發者稱之為BSP,這一層主要負責的是向下提供硬體的驅動,硬體的配置等操作,向上則向軟體開發者提供標準API,進行中間層開發的開發者通常稱為嵌入式驅動工程師。

從這裡也可以看出來,嵌入式設計和軟硬都分不開,既要掌握底層硬體的特性以及如何驅動其工作,也要了解作業系統的相關知識,才可以編寫相應功能的應用。

因此看一個作業系統是否支援某個晶片或者某個開發板,只要看其原始碼中是否包含相應晶片或開發板的板級支援包。

以上就是本人對嵌入式系統系統的理解,接下來再來談談嵌入式系統應該跑在什麼樣的硬體上。

談起嵌入式硬體或者開發板,我想很多人第一印象就是RaspberryPi,是一塊只有信用卡大小的微型電腦,別看其外表“嬌小”,內“心”卻很強大,視訊、音訊等功能通通皆有,可謂是“麻雀雖小,五臟俱全”。樹莓派推出後,很多廠商爭相推出類似產品,比如香蕉派之類的。在這裡用TIBeagleboneblack板子進行說明,Beagleboneblack板如下圖所示:

                                                                              

可以看出體積大小和樹莓派類似,外設包括有USBhostUSBmini以及網絡卡介面,,背面還有一個sd卡槽和HDMI介面。接下來看看它的效能引數:

下表是BBB板和樹莓派的效能引數比較:


Beagleboneblack的處理器是一塊主頻達到1GHZTi處理器,基於armcortexa8架構,RAM512MDDR3,儲存器大小為2GB,支援的作業系統包括UbuntuarchLinuxAndroid等。外設有USBhost和一塊百兆網絡卡。

BBB的處理器採用的是當前嵌入式系統中最流行的ARMv7指令集。採用當今廣泛使用的指令集的處理器可以被更多的軟體支援。例如,一些作業系統已經不支援在ARMv6指令集上執行,例如,Ubuntu20124月放棄了對ARMv6指令集的支援。

ARMv7相對與ARMv6指令集的另一個優勢在於,使用ARMv7的處理器的實際效能更加強勁。ARMv7相對與ARMv6的優勢還有很多,比如一些顯著的改進:實現了超標量架構、包含了SIMD操作指令、改進了分支預測演算法從而極大的提高了某些效能。

總結:

以上就是一塊基本的嵌入式核心板所具有的效能引數,和上面說到的微控制器的效能引數相比較,微控制器的處理能力較低,主頻大多在幾十M上下,和嵌入式動輒上百上千M的處理速度還是相差較多,此外微控制器並不具有圖形介面的處理能力,也就是GPU的缺乏導致微控制器幾乎不可能帶動圖形介面;微控制器的儲存空間和嵌入式處理器也不是一個等級的,微控制器通常片記憶體儲只有幾k大小,而由於外設的限制也不太可能大範圍增加外設emmc,而嵌入式處理器通常有幾百兆的RAM,如此巨大的差別導致微控制器幾乎不可能像嵌入式處理器那樣執行作業系統,甚至連TCP/IP協議棧和USB協議棧都跑不起來,一些高階的微控制器比如ST公司的STM32系列,可能可以跑一些輕量級的系統os和嵌入式網路協議棧,比如IwIP協議棧。嵌入式處理器豐富強大的效能決定它能完成更多微控制器不能完成的應用,比如網路通訊功能,視訊傳輸處理功能等,而當外設儲存增加後,嵌入式處理器能夠輕鬆執行各種Linux系統,以及圖形GUI介面。

在開發方式上微控制器和嵌入式也有較大差別,也就是編譯過程的區別,微控制器主要在Windows等圖形介面下開發,目前有很多成熟的IDE工具比如keilIAR、以及tiCCS等,這些工具集編譯、彙編、連結、模擬為一體,並且由於在Windows下開發,具有友好的使用者介面,開發者只需編寫c程式碼,然後點選編譯連結按鍵即可,出現錯誤還可以debug或者模擬,上手還是非常快的。而嵌入式開發一般是在Linux下進行的,要將c程式碼在自己主機上編譯完成,然後通過系統映象或者uboot引導將編譯好的檔案燒入開發板,由於主機的處理器的x86架構,而編寫的程式碼是為了執行在arm架構或sparc架構的處理器上,因此存在一個交叉編譯鏈的安裝,此外,Linux下沒有Windows那樣的IDE,也就是編譯,連結原始碼都需要開發者自己完成,一般都是利用GNUmake指令碼編寫Makefile以及configure檔案來完成,Makefile檔案中編寫如何對c或者h檔案編譯,也就是編譯規則以及依賴檔案是什麼。這些都需要開發者自己完成。並且以上過程都是在Linux下的終端也就是命令列中完成,這也給嵌入式開發增加了難度。