图4.7 OSTimeTickt()程序流程
5 μC/OS-II在S3C44BOX上的移植
5.1μC/OS-II系统移植概述
所谓移植就是使一个实时内核能够在其他微处理器或微控制器上运行。为了提高可移植性,大部分的μC/OS-II代码是用C语言写的,但仍需要汇编语言编写一些与处理器相关的代码,因为μC/OS-II在读写处理器寄存器时只能通过汇编语言来实现。μC/OS-II在设计时就己经充分考虑了可移植性,所以μC/OS-II的移植相对而言来说是比较容易的,图5-1说明了μC/OS-II的体系结构及它与系统硬件之间的关系。应用程序软件μC/OS-II(与处理器无关的代码)
图5.1μC/OS-II硬件与软件体系结构图
要使μC/OS-II系统正常运行,处理器必须满足以下要求:
1.处理器的C编译器能产生可重入代码。可重入的代码指的是一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏数据。这种代码的重入性是保证完成多任务的基础,除了在C程序中使用局部变量外,还需要C编译器的支持。
2.处理器支持中断,并能产生定时中断(通常在10到100HZ)。μC/OS-II是通过处理器产生的定时器中断来实现多任务之间的调度的,在ARM7TDMI的处理器上可以产生定时器中断。
3.用C语言就可以打开和关闭中断。在μC/OS-II中,可以通OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()两个宏来控制系统关闭或者打开中断。这需要处理器的支持,在ARM7TDMI的处理器上,可以设置相应的寄存器来关闭或者打开系统的所有中断。
4.处理器支持能够容纳一定量数据(可能是几千字节)的硬件堆栈。
5.处理器有将堆栈指针和其他CPU寄存器读出和存储到堆栈或内存的指令。μC/OS-II进行任务调度的时候,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后再从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。所以寄存器的入栈和出栈是μC/OS-II多任务调度的基础。ARM7TDMI处理器是一种完全满足上述要求的处理器。本文主要工作之一就是研究如何将μC/OS-II移植到Samsung公司的一款基于ARM7TDMI内核的嵌入式处理器—S3C44B0X上。
5.2 移植方法
5.2.1 编制OS_CPU.H文件
OS_CPU.H文件包括了与处理器相关的常量、宏和类型定义。移植时需要在这个文件中用#define设置一个常量(OS_STK_GROWTH)的值,声明10个数据类型,并声明两个宏(OS_ENTER_CRITICAI()和OS_EXIT_CRITICAL())。因为不同的微处理有不同的字长[33],所以μC/OS-II的移植包括了一系列的数据类型定义,为确保可移植性,OS_CPU.H中数据类型定义如下:
typedef unsigned char INT8U
typedef char INT8S
typedef unsigned int INT16U//GCC中short为16
typedef int INT16S
typedef unsigned long INT32U
typedef long INT32S
typedef float FP32
typedef float FP64
typedef int BOOLEAN
常量OS_STK_GROWTH用来指定堆栈的生长方式,绝大多数微处理器和微控制器的堆栈是从上往下长的,但是某些处理器使用另外一种方式工作。μC/OS-II被设计成两种情况都可以处理,只需要给OS_STK_GROWTH赋不同的值。当OS_STK_GROWTH置0时,表示堆栈从下往上长;当OS_STK_GROWTH置1时,表示堆栈从上往下长,这里OS_STK_GROWTH定义如下:
#define OS_STK_GROWTH 1
宏OS_ENTER_CRITICA()和OS_EXIT_CRITICAL()用来禁止和允许中断。和所有的实时内核一样,μC/OS-II需要先禁止中断再访问代码的临界区,并在访问完毕后重新允许中断。在ARM平台上有两种办法实现对中断的屏蔽,第一种通过修改状态字屏蔽中断,另一种通过SWI功能来实现,这里采用较为简单的第一种方法来实现。程序状态寄存器CPSR包含条件码标志、中断禁止位和当前处理器模式以及其它状态和控制信息,其中的N(Negative)、Z(Zero)、C(Carry)和V(Overflow)位为条件码标志,经常作为标志位引用,可供大多数指令作为是否执行的检测标志。CPSR的最低8位I、F、T和M[4:0]用作控制位,其中的I、F为中断禁止位,当I位置1禁止IRQ中断,而F位置1则禁止FRQ中断。通过给CPSR相应的位赋值就可以实现开关中断的功能。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>