嵌入式系統簡單介紹(入門)

2021-09-11 17:57:29 字數 3914 閱讀 1303

嵌入式系統簡單介紹(入門)

嵌入式作業系統是一種執行在嵌入式相關產品中的作業系統,它的主要作用是負責任務的排程,記憶體的分配以及資料的儲存等。常見的嵌入式產品有手機,平板,自助取款機,收銀台結算機等等。嵌入式作業系統為使用者程式提供了豐富的介面,如裝置的驅動介面、通訊介面、圖形介面等,這就大大的方便了應用程式的開發,使得嵌入式產品的可靠性、實用性、使用者體驗等都大大提公升。以下幾款系統是常見的嵌入式作業系統,ucos-ii,嵌入式 linux,風河 vxworks,微軟 wince 等。

嵌入式系統的軟體架構

在進行一款產品的設計時可以選擇使用作業系統,也可以選擇不使用作業系統。在不使用作業系統的程式設計中,應用軟體的開發一般會涉及到晶元暫存器,定時器,外部中斷,儲存位址等與硬體相關的特性。這就要求軟體的開發人員對底層硬體有較

好的理解。而嵌入式作業系統通過對軟體架構進行了層次劃分,應用程式的開發人員

只需要關心與專案功能相關的**,負責任務功能的實現,不必關心硬體底層的資訊,

這在某種程度上遮蔽了底層硬體對開發人員的限制,同時這種設計也使應用軟體的移

植性有了提高。同時,底層軟體設計人員,不必關心專案的功能,只要提供給上層調

用硬體的介面函式即可。對嵌入式作業系統的軟體設計來說,一般會將其分為多個層

次,這裡將其進行四個層次的劃分,分別是:裝置驅動層、核心層、應用介面層、應

用層。在進行產品設計時,由於產品的功能不同,所採用的硬體也不同。因此,軟體部分的設計會根據硬體進行一些裁剪。對於那些功能比較簡單,使用低端微控制器就可以實現的設計,完全沒有必要採用作業系統,其一般只包括驅動層和應用層。對於複雜的專案設計,則需要採用作業系統來進行專案的設計,而且這也是科技發展的必然趨勢。下面將分別介紹作業系統的各個層次。

驅動層驅動層是由三個部分所組成的:硬體抽象層(hal)、板級支援包(bsp)和驅動程式。驅動層的功能是對硬體資訊進行遮蔽,為上層提供統一的軟體介面,使得上層的應用開發無需關心具體的硬體組成,有利於開發過程中相關人員的任務分配。

由於完成的專案不同,所採用的硬體裝置也不完全一樣,因此同樣的作業系統在不同的專案中需要對硬體相關的**進行重新編寫,這在無形之中增加了系統移植的難度,為了解決這個問題增加了硬體抽象層(hal)。硬體抽象層實質上是一種硬體的 api 介面,將這些介面提供給系統和上層應用來使用。硬體抽象層的工作主要是進行硬體的初始化包括定時器、串列埠、中斷等,配置 i/o 及通訊方式[12]。硬體抽象層將作業系統核心、上層的應用程式與硬體進行完全的隔離,方便了系統核心**和應用程式的移植工作。

hal對硬體進行了抽象表述,給出了其 api 的定義,但是不給出具體的編碼實現。通常底層硬體實現 hal 的各種功能是以 bsp 的形式來完成的。底層硬體和作業系統之間的連線是通過板級支援包來實現的,是 hal 的具體實現形式,所以有些人也稱 bsp 層為 hal[

13]。硬體相關暫存器,儲存器,i/o 介面等的實現主要是通過 bsp實現的,其為作業系統的呼叫奠定了底層的基礎。

bsp 的特點有:硬體相關性,bsp 程式直接關聯與專案採用的具體硬體,不同的硬體具有不同的板級支援包;作業系統相關性,由於當前的市場上有多種作業系統的存在,且每個作業系統與硬體之間定義的介面不同,因而其實現方式各異[14]。板級支援包需要根據作業系統定義的介面來實現,因而在進行 bsp 程式設計時一般採用的方式是在一定的模板上進行修改,而非重新編寫。

裝置驅動程式通常指的是在作業系統中的驅動程式,一般以模組的方式封裝在作業系統中,為上層的應用提供裝置介面,同時會使用 bsp 提供的函式來實現對硬體的操作。總之,驅動層是系統和硬體之間的結合,對系統效能的提高起著十分重要的作用[15]。

核心層核心並不是乙個作業系統,只是作業系統的一部分,但卻是最為重要的一部分,是作業系統的核心。作業系統中的任務排程,記憶體管理,磁碟管理等,都和系統的核心有著密切的關係。擁有的核心不同,則作業系統的名稱也不同,例如基於 linux 核心的作業系統叫 linux 系統,基於 wind 核心的作業系統是 vxworks 系統等[16]。

核心作為作業系統的核心,擁有著最高的許可權。通常應用程式不允許直接和底層進行互動,以防止出現系統癱瘓。系統核心是應用和底層硬體的媒介,應用要完成一定的功能必須要有硬體的支援,因此核心通過呼叫應用程式來獲取應用任務,同時核心通過呼叫系統的驅動程式,去實現相應的功能。通常為了保證工作時系統的穩定可靠,編寫的應用程式不能修改系統的核心檔案。

實際上應用程式可以不通過作業系統來呼叫底層硬體,在低端微控制器程式的開發中,往往是應用程式直接呼叫底層的暫存器,i/o 介面等來完成相應的操作。但是,隨著微處理器技術的發展,使用微處理器完成的專案越來越複雜,同時對所開發產品的可靠性、實時性、移植性等提出的要求越來越高。因此,帶有作業系統的嵌入式應用會越來越普及。

應用程式介面層

在嵌入式作業系統的設計中,應用層和核心層相互之間會用介面進行互動並提供服務,其中應用層與核心之間的介面稱之為應用程式介面(api)。api 實際上是一種功能集合,也可說是定義、協議的集合,無論是哪種集合,它的實質都是通過抽象為使用者遮蔽實現上的細節和複雜性。從使用者角度看應用程式介面,表現為一系列的 api函式,使用者可以使用這些函式進行應用程式的開發。從使用者角度看,應用程式介面給使用者提供了一組方法,使用者可以使用這組方法向核心層傳送業務請求、資訊和資料,核心層在根據相應的資料進行相關硬體的呼叫,從而完成相應的業務請求。

應用程式層

應用程式層通常為使用者編寫的為了實現某種功能的任務程式,可以只有乙個任務也可以有多個任務。這些程式的編寫和具體的硬體無關,無需考慮硬體的差異,因此應用層的程式便於移植,程式編寫人員無需了解具體的底層實現,這就使得應用程式的開發門檻大大降低,同時減少了工作量。應用程式是和完成的具體任務相關的一部分程式,也是專案開發人員最需要關心的一部分程式。這部分程式的設計直接影響到系統的功能能否正確的實現。因此,在專案開發中,要把主要工作放在這一層進行。

常見的嵌入式實時作業系統

vxworks

vxworks 的提供商是美國的風河公司,它同時提供了一套整合開發環境 tornado,

介面有點類似微軟的 visual studio,但是有更加強大的除錯和**功能,便於除錯和

修改[17]。vxworks 之所以能在嵌入式系統中廣泛應用,與其良好的架構設計,友好的

開發環境等是分不開的。由於其系統的可靠性,它已經被廣泛應用在包括航空、航天、

軍事等眾多領域。vxworks 的組成涉及到程序、儲存、裝置、檔案等的管理,以及網

絡協議。其核心 wind 具有可靠的任務管理和實時切換,從而保證了系統的可靠執行。

優點:系統採用了高效能的作業系統實時核心,穩定可靠。同時,由於風河公司

的服務支援完善,便於問題的快速解決。

缺點:開發環境中的專案(project)管理能力不足,vxworks 技術支援上仍比較欠

缺,並且 vxworks 屬於商業軟體,不提供源**,不便於進行相應的更改。

uclinux

uclinux 是對桌面 linux 進行相應的剪裁修改後,應用到嵌入式領域的一款 linux

系統[18]。為了將桌面的 linux 系統應用到嵌入式領域,lineo 公司對其進行了大量的

修改,使得其**量更低,實時性得到了增強。

linux 作業系統是一種開源的作業系統,由於其可以免費使用,且十分穩定,已

經廣泛應用在伺服器領域中。隨著嵌入式產品的使用需求的提高,因此對嵌入式 linux

的需求不斷加大。而 uclinux 正是在此基礎上,通過對 linux 系統進行相應的裁剪,

優化,進而產生的乙個具有實時性的嵌入式系統。雖然經過剪裁的 uclinux **量很

小,但是基本上保持了原有 linux 的所有基本功能。由於 linux 的開源性,因此大部

分基於 gnu 的軟體基本上可以不需改動或者稍加修改後即可執行在 uclinux 上。

優點:保持了 linux 系統的穩定可靠,擁有豐富的 api 介面函式,良好的**移

植性,軟體**開源。

缺點:由於 linux 本身是為桌面系統而設計,雖然嵌入式 linux 進行了很多的改

進,但實時性上並不是很高。

**:基於嵌入式作業系統的無人機自動駕駛儀設計及自抗擾演算法研究[d]. 北京理工大學, 2016.

嵌入式介紹

這是嵌入式中使用最為廣泛的知識點。複雜點的工程幾乎所有的函式在傳遞變數時不會直接傳遞變數,而是傳遞變數的指標。這樣做有什麼好處呢?好處便是這樣做是直接操作記憶體。舉個例子 我們知道 中定義的變數都是有記憶體的。比如 int a 3 我們定義完之後,編譯器會自動向晶元ram區申請一塊區域放置這個資料。...

嵌入式入門

入門階段 不要只看書,要多動手,但千萬不是直接動手,不去看書 c語言 嵌入式程式設計大多用c語言 少量彙編,先學習c語言,彙編用到的時候再上網查詢。教材 隨便一本c語言大學教材,快速入門,電腦上照著教材敲 有問題網上搜尋解決。簡單模組 數碼管 蜂鳴器 電機 按鍵 流水燈等 不一定要學習開發板上的所有...

嵌入式系統開發入門

專案名稱 蘇嵌實訓 嵌入式linuxc第1天 今日進度以及任務 學習了linux使用者管理命令 檔案管理命令 目錄命令 檔案分類 檔案的屬性 文字編輯器,七道作業題 本日任務完成情況 完成了軟體的安裝 掌握一些基本命令 學會通過linux命令來完成 編寫 本日開發收穫 了解了linux 學會了lin...