1. 程式人生 > 實用技巧 >什麼是嵌入式系統

什麼是嵌入式系統

什麼是嵌入式系統

嵌入式系統(Embedded System) 是一種完全嵌入受控器件內部,為特定應用而設計的專用計算機系統。

1、僅有非常有限的硬體資源,成本大幅下降,但對軟體的優化提出更高要求。

2、一般執行固定的程式或固定的作業系統,再加上可變的應用程式。

3、有些為工業系統,僅用於某個特定的控制目的;有些因為有應用程式的加入而更顯靈活,如手機,平板電腦。

現代的嵌入式系統一般分為簡單嵌入式系統和複雜嵌入式系統。

1、簡單嵌入式系統一般是由單片整合控制器作為硬體核心的嵌入式系統,其核心只有一片晶片,卻集成了處理器、快閃記憶體、記憶體、數字和模擬外設這些設略去,開發難度低。

效能一般,僅適合於自動化、運動控制、電源控制等簡單控制類應用。

2、複雜嵌入式系統一般由獨立的處理器和快閃記憶體構成。處理器本身不整合大量的外設,僅執行處理任務,如CPU。

系統靈活多變,效能較好,用於人機介面,智慧裝置,手機等效能要求高的場景。

1)基於DSP的嵌入式系統一般用於處理大量的資料,典型應用為語音處理,雷達訊號處理等。

2)基於MIPS的嵌入式系統一般應用於駝用計算。

3)基於X86的嵌入式系統是把傳統的計算機壓縮,精簡。

在任何時刻,CPU只能執行在一種模式,但由於外部事件(中斷)或程式設計方式,能夠切換到其它的模式。CPU ARM架構指定了以下的CPU模式:

使用者模式,唯一的非特權模式。

系統模式,通過非異常的方法進入的特權模式。

SVC模式,執行SWI指令或處理器復位後進入的模式。

Abort模式,快取沒有命中時進入的模式。

未定義模式,執行非法指令時進入的模式。

干預模式,處理IRQ的模式。

快速干預模式,處於是FRQ(快速IRQ)的模式。

Hyp模式,Cortex-A 15專用的虛擬化模式。

ARM處理器屬於精簡指令集處理器(RISC)。因為指令集的減少,很多操作需分步進行,從而減少了相同週期內執行指令的個數。

Android系統移植的主要目的是為了能在特定的硬體上執行Android系統。

1、熟悉硬體抽象層的介面。

Android系統硬體抽象層工作在使用者空間,它向下呼叫Linux中的驅動程式,向上提供介面,供Android系統之外的其它部分呼叫。

2、整合和複用已有的驅動程式。

linux中的驅動工作在系統的核心空間,這些驅動程式是Linux的標準 驅動程式。

Android的移植分為以下幾個主要的型別:

基本圖形使用者介面(GUI)部分,包括顯示部分和使用者輸入部分;

與硬體相關的加速部分,包括媒體編解碼和OpenGL;

音視訊輸入輸出環節,包括音訊、視訊輸出和攝像頭部分;

連線部分,包括無線區域網、藍芽、GPS;

電話部分;

附屬部分,包括感測器、背光、振動器等。

電源管理。

Android系統運行於Linux Kernel之上,但並不等同於GNU / Linux,包括Cairo,X11,Alsa,FFmpeg,GTK,Pango及Glibc等都被Android系統移除掉了。

Android系統以Bionic取代Glibc, Bionic是Android對glibc改良的版本。bionic是一個專為嵌入式系統設計的輕量級標準 庫實現,優化和裁剪了一些使用頻率低並且資源消耗比較高的函式,使其具有更小的體積和記憶體佔用,提高執行效率。

bionic支援標準 C/C++庫的絕大部分功能,支援數學庫及NPTL執行緒庫。實現了用於動態庫建立和載入操作的Linker和Loader,以及一套使用共享記憶體方式實現的property系統。

以核心圖形引擎Skia取代Cairo,搭配OpenGL/ES,並採用SQLite資料庫系統為多媒體資料庫。

以OpenCORE取代FFmpeg.

Android為了達到商業應用,必須移除被GNU GPL受權證所約束的部分。

Dalvik虛擬機器可以有多個例項,每個Android應用程式都有一個自屬的Dalvik虛擬機器來執行,讓系統在執行程式時可達到優化。

Dalvik虛擬機器並非執行Java位元組碼,而是執行一種.dex格式的檔案。這一格式是Dalvik所獨有的一種壓縮格式,適合記憶體空間和處理器速度非常有限的系統。Dalvik虛擬機器是基於暫存器的。

Dalvik虛擬機器的輸入是已經編譯好的class檔案或jar檔案,Dalvik虛擬機器首先使用dx工具將檔案轉換為dex檔案,在這個過程中Java指令被翻譯成Dalvik指令,檔案佔用的空間會顯著縮小。

Dalvik虛擬機器與Java虛擬機器除了指令集和類檔案格式不同以外,二者擁有差不多的特性,例如,它們都是解釋執行,並且支援即時編譯JIT,垃圾收集GC,Java本地方法呼叫JNI,和Java遠端除錯協義JDWP等。

核心的主要用途是實現對裝置硬體的程式設計控制和介面操作,排程對硬體資源的訪問,為使用者程式提供一個高階的執行環境,和對硬體的虛擬介面,實現使用者程式與硬體的互動。

核心實現的是一個資源管理器的功能,核心負責管理並裁定多個競爭使用者對資源的訪問(包括核心空間和使用者空間)。

核心提供兩種結構模式,整體式的單核心模式,和層次式的微核心模式。

Linux核心由上至下分別為:

系統呼叫介面,實現系統的基本功能,如read和write功能;

獨立於體系結構的核心程式碼,這些程式碼是Linux所支援的所有處理器體系結構所通用的核心程式碼;

依賴於體系結構的程式碼,用於特定體系結構的處理器和特定平臺的程式碼,構成了BSP(Board Support Package)部分。