杨德芳
摘 要 本文描述了嵌入式操作系统UC/OS-II在ARM上实现移植的过程。介绍了操作系统的移植原理和方法,并且给出了部分移植函数的代码,实现了UC/OS-II在ARM上的移植。
关键词 ARM体系结构,移植,时钟中断,任务级切换
一、引言
随着技术的进步,嵌入式系统设计及其应用在近年来,对人类生活产生了巨大影响,并将继续改变人们未来的生活方式。研究嵌入式系统,一个必不可少的基础工作就是实现嵌入式操作系统在相关处理器平台上的移植。本文基于目前应用非常广泛的ARM处理器体系结构,对uC/OS-II嵌入式实时操作系统内核的移植工作做了分析和介绍。
所谓移植,就是使一个实时内核在某个微处理器上运行。UC/OS-II主要是C语言编写的,但是还需要用C语言和汇编语言写出一些与具体处理器相关的代码,因为访问处理器的某些程序和语言必须用汇编语言来进行编写。移植可以分为两部分,一部分与ARM 有关,另一部分与移植原理有关。
二、UC/OS_II文件的结构及硬件
实际上UC/OS-II可以简单地看作是一个多任务调度器,在这个任务调度器上完善地添加了与多任务操作系统相关的一些系统服务,如信号量、邮箱等。其90%的代码是用C语言写的,可以直接移植到有C语言编译器的处理器上。移植工作主要都集中在多任务切换的实现上,因为这部分代码用来保存和恢复CPU现场(即写/读相关寄存器),不能用C语言,只能使用汇编语言完成。UC/OS-II的全部源代码量大约是6000-7000行,共15个文件。将 UC/OS-II 移植到ARM处理器上,需要修改三个与ARM体系结构相关的文件,代码量大约是500行,这三个文件是OS_CPU_C.C、OS_CPU_C.H以及OS_CPU_A.S 。UC/OS_II文件的结构及硬件如图1 所示。
与处理器类型无关的代码
OS_CORE.C
OS_MBOX.C
OS_MUTEX.C
OS_SEM.C
OS_TIME.C
UCOS_II.C
OS_FLAG.C
OS_TASK.C
UCOS_II.H
OS_Q.C |
UC/OS的配置文件,与应用程序有关
OS_CFG.H
INCLUDE.H |
移植UC/OS-II与处理器有关的代码
OS_CPU.H
OS_CPU_A.ASM
OS_CPU_C.C |
三、移植过程
1.编写OS_CPU.H
UC/OS-II不使用C语言中的short\int\long等数据类型的定义,因为它与处理器类型有关,隐含着不可移植性。代之以移植性强的整数数据类型,这样直观又可移植,在ADS编译器上其数据类型定义的核心代码如下:
Typedef unsigned char BOOLEAN;
Typedef unsigned char INT8U;
Typedef unsigned char INT8S;
Typedef unsigned short INT16U;
Typedef signed short INT16S;
Typedef unsigned int INT32U;
Typedef signed int INT32S;
Typedef float FP32;
Typedef double FP64;
Typedef INT32U OS_STK;
|