从 μC/OS 升级到 μC/OS-II
本章描述如何从μC/OS 升级到 μC/OS-II。如果已经将μC/OS移植到了某类微处理器上,移植μC/OS-II所要做的工作应当非常有限。在多数情况下,用户能够在1个小时之内完成这项工作。
如果用户熟悉μC/OS的移植,可隔过本章前一部分直接参阅10.05节。
10.0目录和文件
用户首先会注意到的是目录的结构,主目录不再叫 SOFTWAREuCOS。而是叫SOFTWAREuCOS-II。 所有的μC/OS-II文件都应放在用户硬盘的SOFTWAREuCOS-II 目录下。面向不同的微处理器或微处理器的源代码一定是在以下两个或三个文件中: OS_CPU.H,OS_CPU_C.C,或许还有OS_CPU_A.ASM.。汇编语言文件是可有可无的,因为有些C编译程序允许使用在线汇编代码,用户可以将这些汇编代码直接写在 OS_CPU_C.C.中。
与微处理器有关的特殊代码,即与移植有关的代码,在 μC/OS 中是放在用微处理器名字命名的文件中的,例如,Intel80x86的实模式(RealMode),在大模式下编译(LargeModle)时,文件名为Ix86L.H, Ix86L_C.C,和Ix86L_A.ASM.。
表L10.1在μC/OS-II中重新命名的文件.

升级可以从这里开始:首先将μC/OS目录下的旧文件复制到μC/OS-II 的相应目录下,并改用新的文件名,这比重新建立一些新文件要容易许多。表10.2给出来几个与移植有关的新旧文件名命名法的例子。
表 L10.2对不同微处理器从μC/OS到μC/OS-II,要重新命名的文件.


10.1 INCLUDES.H
用户应用程序中的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 文件中有与微处理器类型及相应硬件有关的常数定义、宏定义和类型定义。
10.2.1 与编译有关的数据类型s
为了实现 μC/OS-II, 用户应定义6个新的数据类型: INT8U、 INT8S、 INT16U、 NT16S、INT32U、和INT32S。这些数据类型有分别表示有符号和无符号8位、16位、32位整数。在μC/OS中相应的数据类型分别定义为:UBYTE、BYTE、UWORD、WORD、ULONG和LONG。用户所要做的仅仅是复制μC/OS中数类型并修改原来的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 数据类型的修改.
/*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中, 任务栈定义为类型OS_STK_TYPE, 而在μC/OS-II中任务栈要定义类型OS_STK.,为了免于修改所有应用程序的文件, 可以在OS_CPU.H中建立两个数据类型, 以Intel80x86 为例,如程序清单 L10.4所示。
程序清单 L10.4μC/OS 和 μC/OS-II任务栈的数据类型
#defineOS_STK_TYPEUWORD/* 在 uC/OS 中 */
#defineOS_STKINT16U/* 在 uC/OS-II 中 */
10.2.2OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()
μC/OS-II和μC/OS一样,分别定义两个宏来开中断和关中断:OS_ENTER_CRITICAL()和
OS_EXIT_CRITICAL()。在μC/OS向μC/OS-II升级的时候,用户不必动这两个宏。.
10.2.3OS_STK_GROWTH
大多数微处理器和微处理器的栈都是由存储器高地址向低地址操作的,然而有些微处理器的工
作方式正好相反。μC/OS-II设计成通过定义一个常数OS_STK_GROWTH来处理不同微处理器栈操作的取向:

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码