新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 移植μC/OS-Ⅱ

        移植μC/OS-Ⅱ

        作者: 時間:2016-10-08 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/201610/305739.htm

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

        1.處理器的C編譯器能產生可重入代碼。

        2.用C語言就可以打開和關閉中斷。

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

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

        5.處理器有將堆棧指針和其它CPU寄存器讀出和存儲到堆棧或內存中的指令。

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

        圖8.1說明了μC/OS-Ⅱ的結構以及它與硬件的關系。由于μC/OS-Ⅱ為自由軟件,當用戶用到μC/OS-Ⅱ時,有責任公開應用軟件和μC/OS-Ⅱ的配置代碼。這本書和磁盤包含了所有與處理器無關的代碼和Intel80x86實模式下的與處理器相關的代碼(C編譯器大模式下編譯) 。如果用戶打算在其它處理器上使用μC/OS-Ⅱ,最好能找到一個現成的移植實例,如果沒有只好自己編寫了。用戶可以在正式的μC/OS-Ⅱ網站www. μCOS-Ⅱ.com中查找一些移植實例。

        圖 8.1μC/OS-II 硬件和軟件體系結構

        如果用戶理解了處理器和C編譯器的技術細節,移植μC/OS-Ⅱ的工作實際上是非常簡單的。前提是您的處理器和編譯器滿足了μC/OS-Ⅱ的要求,并且已經有了必要工具。移植工作包括以下幾個內容:

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

        z 聲明10個數據類型(OS_CPU.H)

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

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

        z 編寫四個匯編語言函數(OS_CPU_A.ASM)

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

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

        8.00 開發工具

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

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

        8.01 目錄和文件

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

        所有的移植實例都應放在用戶硬盤的SOFTWAREμCOS-Ⅱ目錄下。各個微處理器或微控制器的移植源代碼必須在以下兩個或三個文件中找到:OS_CPU.H,OS_CPU_C.C,OS_CPU_A.ASM。匯編語言文件OS_CPU_A.ASM是可選擇的,因為某些C編譯器允許用戶在C語言中插入匯編語言,所以用戶可以將所需的匯編語言代碼直接放到OS_CPU_C.C中。放置移植實例的目錄決定于用戶所用的處理器, 例如在下面的表中所示的放置不同移植實例的目錄結構。注意,各個目錄雖然針對完全不同的目標處理器,但都包括了相同的文件名。

        8.02INCLUDES.H

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

        #includeincludes.h

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

        8.03OS_CPU.H

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

        大體結構如程序清單L8.1所示。

        程序清單 L8.1 OS_CPU.H.

        #ifdefOS_CPU_GLOBALS

        #defineOS_CPU_EXT

        #else

        #defineOS_CPU_EXTextern

        #endif

        /*

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

        * 數據類型

        *(與編譯器相關)


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

        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 宜川县| 隆化县| 崇阳县| 哈尔滨市| 樟树市| 上林县| 满洲里市| 永顺县| 博野县| 福安市| 谢通门县| 玛纳斯县| 襄城县| 平乡县| 临泉县| 宾川县| 昭觉县| 南投市| 宜兰县| 维西| 海门市| 尚义县| 平昌县| 揭东县| 建湖县| 米泉市| 益阳市| 隆林| 封丘县| 乌什县| 金山区| 罗城| 新巴尔虎左旗| 嘉鱼县| 和林格尔县| 万州区| 高陵县| 拉孜县| 石家庄市| 江北区| 平罗县|