新聞中心

移植μC/OS-Ⅱ

作者: 時(shí)間:2016-10-08 來源:網(wǎng)絡(luò) 收藏

這一章介紹如何將μC/OS-Ⅱ移植到不同的處理器上。所謂移植,就是使一個(gè)實(shí)時(shí)內(nèi)核能在某個(gè)微處理器或微控制器上運(yùn)行。為了方便移植,大部分的μC/OS-Ⅱ代碼是用C語言寫的;但仍需要用C和匯編語言寫一些與處理器相關(guān)的代碼,這是因?yàn)?mu;C/OS-Ⅱ在讀寫處理器寄存器時(shí)只能通過匯編語言來實(shí)現(xiàn)。由于μC/OS-Ⅱ在設(shè)計(jì)時(shí)就已經(jīng)充分考慮了可移植性,所以μC/OS-Ⅱ的移植相對(duì)來說是比較容易的。如果已經(jīng)有人在您使用的處理器上成功地移植了μC/OS-Ⅱ,您也得到了相關(guān)代碼,就不必看本章了。當(dāng)然,本章介紹的內(nèi)容將有助于用戶了解μC/OS-Ⅱ中與處理器相關(guān)的代碼。

本文引用地址:http://2s4d.com/article/201610/305739.htm

要使μC/OS-Ⅱ正常運(yùn)行,處理器必須滿足以下要求:

1.處理器的C編譯器能產(chǎn)生可重入代碼。

2.用C語言就可以打開和關(guān)閉中斷。

3.處理器支持中斷,并且能產(chǎn)生定時(shí)中斷(通常在10至100Hz之間)。

4.處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。

5.處理器有將堆棧指針和其它CPU寄存器讀出和存儲(chǔ)到堆?;騼?nèi)存中的指令。

像Motorola6805系列的處理器不能滿足上面的第4條和第5條要求,所以μC/OS-Ⅱ不能在這類處理器上運(yùn)行。

圖8.1說明了μC/OS-Ⅱ的結(jié)構(gòu)以及它與硬件的關(guān)系。由于μC/OS-Ⅱ?yàn)樽杂绍浖?,?dāng)用戶用到μC/OS-Ⅱ時(shí),有責(zé)任公開應(yīng)用軟件和μC/OS-Ⅱ的配置代碼。這本書和磁盤包含了所有與處理器無關(guān)的代碼和Intel80x86實(shí)模式下的與處理器相關(guān)的代碼(C編譯器大模式下編譯) 。如果用戶打算在其它處理器上使用μC/OS-Ⅱ,最好能找到一個(gè)現(xiàn)成的移植實(shí)例,如果沒有只好自己編寫了。用戶可以在正式的μC/OS-Ⅱ網(wǎng)站www. μCOS-Ⅱ.com中查找一些移植實(shí)例。

圖 8.1μC/OS-II 硬件和軟件體系結(jié)構(gòu)

如果用戶理解了處理器和C編譯器的技術(shù)細(xì)節(jié),移植μC/OS-Ⅱ的工作實(shí)際上是非常簡單的。前提是您的處理器和編譯器滿足了μC/OS-Ⅱ的要求,并且已經(jīng)有了必要工具。移植工作包括以下幾個(gè)內(nèi)容:

z 用#define設(shè)置一個(gè)常量的值(OS_CPU.H)

z 聲明10個(gè)數(shù)據(jù)類型(OS_CPU.H)

z 用#define聲明三個(gè)宏(OS_CPU.H)

z 用C語言編寫六個(gè)簡單的函數(shù)(OS_CPU_C.C)

z 編寫四個(gè)匯編語言函數(shù)(OS_CPU_A.ASM)

根據(jù)處理器的不同,一個(gè)移植實(shí)例可能需要編寫或改寫50至300行的代碼,需要的時(shí)間從幾個(gè)小時(shí)到一星期不等。

一旦代碼移植結(jié)束,下一步工作就是測試。測試一個(gè)象μC/OS-Ⅱ一樣的多任務(wù)實(shí)時(shí)內(nèi)核并不復(fù)雜。 甚至可以在沒有應(yīng)用程序的情況下測試。 換句話說, 就是讓內(nèi)核自己測試自己。這樣做有兩個(gè)好處:第一,避免使本來就復(fù)雜的事情更加復(fù)雜;第二,如果出現(xiàn)問題,可以知道問題出在內(nèi)核代碼上而不是應(yīng)用程序。 剛開始的時(shí)候可以運(yùn)行一些簡單的任務(wù)和時(shí)鐘節(jié)拍中斷服務(wù)例程。一旦多任務(wù)調(diào)度成功地運(yùn)行了,再添加應(yīng)用程序的任務(wù)就是非常簡單的工作了。

8.00 開發(fā)工具

如前所述,移植μC/OS-Ⅱ需要一個(gè)C編譯器,并且是針對(duì)用戶用的CPU的。因?yàn)?mu;C/OS-Ⅱ是一個(gè)可剝奪型內(nèi)核,用戶只有通過C編譯器來產(chǎn)生可重入代碼;C編譯器還要支持匯編語言程序。 絕大部分的C編譯器都是為嵌入式系統(tǒng)設(shè)計(jì)的, 它包括匯編器、 連接器和定位器。

連接器用來將不同的模塊(編譯過和匯編過的文件)連接成目標(biāo)文件。 定位器則允許用戶將代碼和數(shù)據(jù)放置在目標(biāo)處理器的指定內(nèi)存映射空間中。 所用的C編譯器還必須提供一個(gè)機(jī)制來從C中打開和關(guān)閉中斷。一些編譯器允許用戶在C源代碼中插入?yún)R編語言。這就使得插入合適的處理器指令來允許和禁止中斷變得非常容易了。 還有一些編譯器實(shí)際上包括了語言擴(kuò)展功能,可以直接從C中允許和禁止中斷。

8.01 目錄和文件

本書所付的磁盤中提供了μC/OS-Ⅱ的安裝程序,可在硬盤上安裝μC/OS-Ⅱ和移植實(shí)例代碼(Intel80x86實(shí)模式,大模式編譯)。我設(shè)計(jì)了一個(gè)連續(xù)的目錄結(jié)構(gòu),使得用戶更容易找到目標(biāo)處理器的文件。如果想增加一個(gè)其它處理器的移植實(shí)例,您可以考慮采取同樣的方法(包括目錄的建立和文件的命名等等) 。

所有的移植實(shí)例都應(yīng)放在用戶硬盤的SOFTWAREμCOS-Ⅱ目錄下。各個(gè)微處理器或微控制器的移植源代碼必須在以下兩個(gè)或三個(gè)文件中找到:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。匯編語言文件OS_CPU_A.ASM是可選擇的,因?yàn)槟承〤編譯器允許用戶在C語言中插入?yún)R編語言,所以用戶可以將所需的匯編語言代碼直接放到OS_CPU_C.C中。放置移植實(shí)例的目錄決定于用戶所用的處理器, 例如在下面的表中所示的放置不同移植實(shí)例的目錄結(jié)構(gòu)。注意,各個(gè)目錄雖然針對(duì)完全不同的目標(biāo)處理器,但都包括了相同的文件名。

8.02INCLUDES.H

在第一章中曾提到過,INCLUDES.H是一個(gè)頭文件,它在所有.C文件的第一行被包含。

#includeincludes.h

INCLUDES.H使得用戶項(xiàng)目中的每個(gè).C文件不用分別去考慮它實(shí)際上需要哪些頭文件。使用INCLUDES.H的唯一缺點(diǎn)是它可能會(huì)包含一些實(shí)際不相關(guān)的頭文件。這意味著每個(gè)文件的編譯時(shí)間可能會(huì)增加。 但由于它增強(qiáng)了代碼的可移植性, 所以我們還是決定使用這一方法。用戶可以通過編輯INCLUDES.H來增加自己的頭文件,但是用戶的頭文件必須添加在頭文件列表的最后。

8.03OS_CPU.H

OS_CPU.H包括了用#defines定義的與處理器相關(guān)的常量,宏和類型定義。OS_CPU.H的

大體結(jié)構(gòu)如程序清單L8.1所示。

程序清單 L8.1 OS_CPU.H.

#ifdefOS_CPU_GLOBALS

#defineOS_CPU_EXT

#else

#defineOS_CPU_EXTextern

#endif

/*

************************************************************************

* 數(shù)據(jù)類型

*(與編譯器相關(guān))


上一頁 1 2 3 4 5 6 下一頁

關(guān)鍵詞:

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉