從 μC/OS 升級到 μC/OS-II
本章描述如何從μC/OS 升級到 μC/OS-II。如果已經(jīng)將μC/OS移植到了某類微處理器上,移植μC/OS-II所要做的工作應(yīng)當(dāng)非常有限。在多數(shù)情況下,用戶能夠在1個小時之內(nèi)完成這項工作。
本文引用地址:http://www.ex-cimer.com/article/201610/305737.htm如果用戶熟悉μC/OS的移植,可隔過本章前一部分直接參閱10.05節(jié)。
10.0目錄和文件
用戶首先會注意到的是目錄的結(jié)構(gòu),主目錄不再叫 SOFTWAREuCOS。而是叫SOFTWAREuCOS-II。 所有的μC/OS-II文件都應(yīng)放在用戶硬盤的SOFTWAREuCOS-II 目錄下。面向不同的微處理器或微處理器的源代碼一定是在以下兩個或三個文件中: OS_CPU.H,OS_CPU_C.C,或許還有OS_CPU_A.ASM.。匯編語言文件是可有可無的,因為有些C編譯程序允許使用在線匯編代碼,用戶可以將這些匯編代碼直接寫在 OS_CPU_C.C.中。
與微處理器有關(guān)的特殊代碼,即與移植有關(guān)的代碼,在 μC/OS 中是放在用微處理器名字命名的文件中的,例如,Intel80x86的實模式(RealMode),在大模式下編譯(LargeModle)時,文件名為Ix86L.H, Ix86L_C.C,和Ix86L_A.ASM.。
表L10.1在μC/OS-II中重新命名的文件.
升級可以從這里開始:首先將μC/OS目錄下的舊文件復(fù)制到μC/OS-II 的相應(yīng)目錄下,并改用新的文件名,這比重新建立一些新文件要容易許多。表10.2給出來幾個與移植有關(guān)的新舊文件名命名法的例子。
表 L10.2對不同微處理器從μC/OS到μC/OS-II,要重新命名的文件.
10.1 INCLUDES.H
用戶應(yīng)用程序中的INCLUDES.H 文件要修改。以80x86 實模式,在大模式下編譯為例,用戶要做如下修改:
? 變目錄名 μC/OS 為 μC/OS-II
? 變文件名 IX86L.H 為 OS_CPU.H
? 變文件名UCOS.H 為 uCOS_II.H
新舊文件如程序清單 L10.1和 L10.2所示
10.2 OS_CPU.H
OS_CPU.H 文件中有與微處理器類型及相應(yīng)硬件有關(guān)的常數(shù)定義、宏定義和類型定義。
10.2.1 與編譯有關(guān)的數(shù)據(jù)類型s
為了實現(xiàn) μC/OS-II, 用戶應(yīng)定義6個新的數(shù)據(jù)類型: INT8U、 INT8S、 INT16U、 NT16S、INT32U、和INT32S。這些數(shù)據(jù)類型有分別表示有符號和無符號8位、16位、32位整數(shù)。在μC/OS中相應(yīng)的數(shù)據(jù)類型分別定義為:UBYTE、BYTE、UWORD、WORD、ULONG和LONG。用戶所要做的僅僅是復(fù)制μC/OS中數(shù)類型并修改原來的UBYTE為INT8U,將BYTE為INT8S,將UWORD修改為INT16U等等,如程序清單 L10.3所示。
程序清單 L10.1μC/OS 中的 INCLUDES.H.
/*
***************************************************************
*INCLUDES.H
***************************************************************
*/
#include
#include
#include
#include
#include
#include
#includeSOFTWAREUCOSIX86LIX86L.H
#includeOS_CFG.H
#includeSOFTWAREUCOSSOURCEUCOS.H
程序清單 L10.2μ$04** 中的 INCLUDES.H.
/*
***************************************************************
*INCLUDES.H
***************************************************************
*/
#include
#include
#include
#include
#include
#include
#includeSOFTWAREuCOS-IIIX86LOS_CPU.H
#includeOS_CFG.H
#includeSOFTWAREuCOS-IISOURCEuCOS_II.H
程序清單 L10.3μC/OS到μC/OS-II 數(shù)據(jù)類型的修改.
/*uC/OSdatatypes:*/
typedefunsignedcharUBYTE;/*Unsigned8bitquanTIty*/
typedefsignedcharBYTE;/*Signed8bitquantity*/
typedefunsignedintUWORD;/*Unsigned16bitquantity*/
typedefsignedintWORD;/*Signed16bitquantity*/
typedefunsignedlongULONG;/*Unsigned32bitquantity*/
typedefsignedlongLONG;/*Signed32bitquantity*/
/*uC/OS-IIdatatypes*/
typedefunsignedcharINT8U;/*Unsigned8bitquantity*/
typedefsignedcharINT8S;/*Signed8bitquantity*/
typedefunsignedintINT16U;/*Unsigned16bitquantity*/
typedefsignedintINT16S;/*Signed16bitquantity*/
typedefunsignedlongINT32U;/*Unsigned32bitquantity*/
typedefsignedlongINT32S;/*Signed32bitquantity*/
在μC/OS中, 任務(wù)棧定義為類型OS_STK_TYPE, 而在μC/OS-II中任務(wù)棧要定義類型OS_STK.,為了免于修改所有應(yīng)用程序的文件, 可以在OS_CPU.H中建立兩個數(shù)據(jù)類型, 以Intel80x86 為例,如程序清單 L10.4所示。
程序清單 L10.4μC/OS 和 μC/OS-II任務(wù)棧的數(shù)據(jù)類型
#defineOS_STK_TYPEUWORD/* 在 uC/OS 中 */
#defineOS_STKINT16U/* 在 uC/OS-II 中 */
10.2.2OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()
μC/OS-II和μC/OS一樣,分別定義兩個宏來開中斷和關(guān)中斷:OS_ENTER_CRITICAL()和
OS_EXIT_CRITICAL()。在μC/OS向μC/OS-II升級的時候,用戶不必動這兩個宏。.
10.2.3OS_STK_GROWTH
大多數(shù)微處理器和微處理器的棧都是由存儲器高地址向低地址操作的,然而有些微處理器的工
作方式正好相反。μC/OS-II設(shè)計成通過定義一個常數(shù)OS_STK_GROWTH來處理不同微處理器棧操作的取向:
評論