預熱物聯網,重溫嵌入式系統基礎知識
在物聯網技術如火如荼的今天,嵌入式開發重新得到了廣大IT從業人員的關注。那么,什么是嵌入式系統?嵌入式系統由哪幾部分組成?嵌入式系統的特點都有哪些?嵌入式系統的開發流程是怎樣的?本文將帶領大家重溫這些基礎知識。
一、嵌入式系統簡介
嵌入式系統是指以應用為中心,以計算機技術為基礎,軟硬件可裁剪,適應應用系統對功能、可靠性、成本、體積、功耗等嚴格要求的專用計算機系統。嵌入式系統一般應用于消費電子、智能家電、網絡設備、醫療儀器、航天設備、工業控制等行業中。
二、嵌入式系統組成
一個嵌入式系統一般都由嵌入式計算機系統和執行裝置組成,嵌入式計算機系統是整個嵌入式系統的核心,由硬件層、中間層、系統軟件層和應用軟件層組成。執行裝置也稱為被控對象,它可以接受嵌入式計算機系統發出的控制命令,執行所規定的操作或任務。
下面,我們來了解一下嵌入式計算機系統的各個部分。
1. 硬件層
硬件層中包含嵌入式微處理器、存儲器(RAM、ROM、Flash等)、通用設備接口和I/O接口(A/D、D/A、I/O等)。在一塊嵌入式處理器基礎上添加電源電路、時鐘電路和存儲器電路,就構成了一個嵌入式核心控制模塊。其中操作系統和應用程序都可以固化在ROM中。
嵌入式系統硬件層的核心是嵌入式微處理器,它與通用CPU***的不同在于它大多工作在為特定用戶群所專用設計的系統中,它將通用CPU許多由板卡完成的任務集成在芯片內部,從而有利于嵌入式系統在設計時趨于小型化,同時還具有很高的效率和可靠性。
嵌入式微處理器的體系結構可以采用馮·諾依曼體系或哈佛體系結構,指令系統可以選用精簡指令系統(Reduced Instruction Set Computer,RISC)和復雜指令系統CISC(Complex Instruction Set Computer,CISC)。嵌入式微處理器有各種不同的體系,即使在同一體系中也可能具有不同的時鐘頻率和數據總線寬度,或集成了不同的外設和接口。
嵌入式系統需要存儲器來存放和執行代碼。嵌入式系統的存儲器包含Cache、主存和輔助存儲器。
Cache是一種容量小、速度快的存儲器陣列,它位于主存和嵌入式微處理器內核之間,存放的是一段時間微處理器使用最多的程序代碼和數據;在需要進行數據讀取操作時,微處理器盡可能的從Cache中讀取數據,而不是從主存中讀取,這樣就大大改善了系統的性能,提高了微處理器和主存之間的數據傳輸速率;Cache的主要目標就是:減小存儲器(如主存和輔助存儲器)給微處理器內核造成的存儲器訪問瓶頸,使處理速度更快,實時性更強;在嵌入式系統中Cache全部集成在嵌入式微處理器內,可分為數據Cache、指令Cache或混合Cache,Cache的大小依不同處理器而定,一般中高檔的嵌入式微處理器才會把Cache集成進去。
主存是嵌入式微處理器能直接訪問的寄存器,用來存放系統和用戶的程序及數據;它可以位于微處理器的內部或外部,其容量為256KB~1GB,根據具體的應用而定,一般片內存儲器容量小,速度快,片外存儲器容量大。
輔助存儲器用來存放大數據量的程序代碼或信息,它的容量大、但讀取速度與主存相比就慢的很多,用來長期保存用戶的信息;嵌入式系統中常用的外存有:硬盤、NAND Flash、CF卡、MMC和SD卡等。
嵌入式系統和外界交互需要一定形式的通用設備接口,外設通過和片外其他設備的或傳感器的連接來實現微處理器的輸入/輸出功能。每個外設通常都只有單一的功能,它可以在芯片外也可以內置芯片中。外設的種類很多,可從一個簡單的串行通信設備到非常復雜的無線設備。嵌入式系統中常用的通用設備接口有A/D(模/數轉換接口)、D/A(數/模轉換接口),I/O接口有RS-232接口(串行通信接口)、Ethernet(以太網接口)、USB(通用串行總線接口)、音頻接口、VGA視頻輸出接口、I2C(現場總線)、SPI(串行外圍設備接口)和IrDA(紅外線接口)等。
2. 中間層
硬件層與軟件層之間為中間層,也稱為硬件抽象層(Hardware Abstract Layer,HAL)或板級支持包(Board Support Package,BSP),它將系統上層軟件與底層硬件分離開來,使系統的底層驅動程序與硬件無關,上層軟件開發人員無需關心底層硬件的具體情況,根據BSP層提供的接口即可進行開發。該層一般包含相關底層硬件的初始化、數據的輸入/輸出操作和硬件設備的配置功能。
BSP具有以下兩個特點:
***,硬件相關性。因為嵌入式實時系統的硬件環境具有應用相關性,而作為上層軟件與硬件平臺之間的接口,BSP需要為操作系統提供操作和控制具體硬件的方法。
第二,操作系統相關性。不同的操作系統具有各自的軟件層次結構,因此,不同的操作系統具有特定的硬件接口形式。
實際上,BSP是一個介于操作系統和底層硬件之間的軟件層次,包括了系統中大部分與硬件聯系緊密的軟件模塊,它的一個主要功能是硬件相關的設備驅動。設計一個完整的BSP需要完成兩部分工作:嵌入式系統的硬件初始化以及BSP功能,設計硬件相關的設備驅動。
3. 系統軟件和應用軟件
系統軟件層由實時多任務操作系統(Real-time Operation System,RTOS)、文件系統、圖形用戶接口(Graphic User Interface,GUI)、網絡系統及通用組件模塊組成。RTOS是嵌入式應用軟件的基礎和開發平臺。
嵌入式操作系統(Embedded Operation System,EOS)是一種用途廣泛的系統軟件,過去它主要應用于工業控制和國防系統領域。EOS負責嵌入系統的全部軟、硬件資源的分配、任務調度,控制、協調并發活動。它必須體現其所在系統的特征,能夠通過裝卸某些模塊來達到系統所要求的功能。隨著Internet技術的發展、信息家電的普及應用及EOS的微型化和專業化,EOS開始從單一的弱功能向高專業化的強功能方向發展。嵌入式操作系統在系統實時高效性、硬件的相關依賴性、軟件固化以及應用的專用性等方面具有較為突出的特點。EOS是相對于一般操作系統而言的,它除具有了一般操作系統最基本的功能,還有以下功能:如任務調度、同步機制、中斷處理、文件處理等。
嵌入式文件系統比較簡單,主要提供文件存儲、檢索和更新等功能,一般不提供保護和加密等安全機制。它以系統調用和命令方式提供文件的各種操作,主要有:1)設置、修改對文件和目錄的存取權限;2)提供建立、修改、改變和刪除目錄等服務;3)提供創建、打開、讀寫、關閉和撤銷文件等服務。文件系統的特點:1)兼容性;2)實時文件系統;3)可裁剪、可配置;4)支持多種存儲設備。
嵌入式GUI具有下面幾個方面的基本要求:輕型、占用資源少、高性能、高可靠性、便于移植、可配置等特點。嵌入式系統中的圖形界面,一般采用下面的幾種方法實現:1)針對特定的圖形設備輸出接口,自行開發相關的功能函數;2)購買針對特定嵌入式系統的圖形中間軟件包;3)采用源碼開放的嵌入式GUI系統;4)使用獨立軟件開發商提供的嵌入式GUI產品。
應用軟件層是由基于實時系統開發的應用程序組成,用來實現對被控對象的控制功能。功能層是要面對被控對象和用戶,為方便用戶操作,往往需要提供一個友好的人機界面。對于一些復雜的系統,在系統設計的初期階段就要對系統的需求進行分析,確定系統的功能,然后將系統的功能映射到整個系統的硬件、軟件和執行裝置的設計過程中,稱為系統的功能實現。
三、嵌入式系統特點
嵌入式系統的特點包括:系統內核小、專用性強、系統精簡、實時性等。具體而言,它主要有如下八個特點:
1)可裁剪性。支持開放性和可伸縮性的體系結構。
2)強實時性。EOS實時性一般較強,可用于各種設備控制中。
3)統一的接口。提供設備統一的驅動接口。
4)操作方便、簡單、提供友好的圖形GUI和圖形界面,追求易學易用;提供強大的網絡功能,支持TCP/IP協議及其他協議,提供TCP/UDP/IP/PPP協議支持及統一的MAC訪問層接口,為各種移動計算設備預留接口。
5)強穩定性,弱交互性。嵌入式系統一旦開始運行就不需要用戶過多的干預、這就要負責系統管理的EOS具有較強的穩定性。嵌入式操作系統的用戶接口一般不提供操作命令,它通過系統的調用命令向用戶程序提供服務。
6)固化代碼。在嵌入式系統中,嵌入式操作系統和應用軟件被固化在嵌入式系統計算機的ROM中。
7)更好的硬件適應性。也就是良好的移植性。
8)嵌入式系統和具體應用有機地結合在一起,它的升級換代也是和具體產品同步進行,因此嵌入式系統產品一旦進入市場,具有較長的生命周期。
四、嵌入式系統開發流程
嵌入式系統的開發分為不帶操作系統(裸機開發)和帶操作系統的開發兩種。裸機開發是指對于功能簡單僅包括應用程序的嵌入式系統一般不使用操作系統,僅有應用程序和設備驅動程序。帶操作系統的開發是由一個操作系統(OS)來管理控制內存、多任務、周邊資源等。
通常基于Linux系統的嵌入式開發步驟有如下七步:
1)開發目標硬件系統:如選擇微處理器、Flash及其它外設等。
2)建立交叉開發環境:安裝交叉編譯工具鏈、安裝開發調試工具。
3)開發Bootloader:移植uboot。
4)移植Linux內核:如Linux 3.0.25內核。
5)開發根文件系統:如CRAMFS,YAFFS等。
6)開發相關硬件的驅動程序:如led,adc等驅動。
7)開發上層的應用程序:如QT GUI開發。
五、嵌入式系統初始化
嵌入式系統初始化過程可以分為3個主要環節,按照自底向上、從硬件到軟件的次序依次為:片級初始化、板級初始化和系統級初始化。
片級初始化完成嵌入式微處理器的初始化,包括設置嵌入式微處理器的核心寄存器和控制寄存器、嵌入式微處理器核心工作模式和嵌入式微處理器的局部總線模式等。片級初始化把嵌入式微處理器從上電時的默認狀態逐步設置成系統所要求的工作狀態。這是一個純硬件的初始化過程。
板級初始化完成嵌入式微處理器以外的其他硬件設備的初始化。另外,還需設置某些軟件的數據結構和參數,為隨后的系統級初始化和應用程序的運行建立硬件和軟件環境。這是一個同時包含軟硬件兩部分在內的初始化過程。
系統級初始化以軟件初始化為主,主要進行操作系統的初始化。BSP(中間層)將對嵌入式微處理器的控制權轉交給嵌入式操作系統,由操作系統完成余下的初始化操作,包含加載和初始化與硬件無關的設備驅動程序,建立系統內存區,加載并初始化其他系統軟件模塊,如網絡系統、文件系統等。***,操作系統創建應用程序環境,并將控制權交給應用程序的入口。
【本文是51CTO專欄作者周兆熊的原創文章,作者微信公眾號:周氏邏輯(logiczhou)】