|
植到ARM处理器上,需要完成的工作也非常简单,只需要修改三个和ARM体系结构相关的文件,代码量大约是500行。以下分别介绍这三个文件的移植工作:
OS_CPU.H 文件 数据类型定义,这部分的修改是与所用的编译器相关的,不同的编译器会使用不同的字节长度来表示同一数据类型,这里采用的编译器为集成可视化开发环境ARM SDT 2.5,相关的数据类型的定义如下:
#define BYTE INT8S /* Define data types for backward compatibility */
#define UBYTE INT8U /* .to uC/OS V1.xx. Not actually needed for . */
#define WORD INT16S /* ... uC/OS-II. */
#define UWORD INT16U
#define LONG INT32S
#define ULONG INT32U
堆栈单位因为处理器现场的寄存器在任务切换时都将会保存在当前运行任务的堆栈中,所以OS_STK 数据类型应该是和处理器的寄存器长度一致的。
typedef unsigned int OS_STK; /* Each stack entry is 16-bit wide */
堆栈增长方向该设置由编译器选项决定,在本开发中设定堆栈由高地址向低地址增长。
#define OS_STK_GROWTH 1 //define the stack to grow from high to low
2、OS_CPU_C.C 文件
任务堆栈初始化 这里涉及到任务初始化时的一个堆栈设计,也就是在堆栈增长方向上如何定义每个需要保存的寄存器位置,在ARM体系结构下,任务堆栈空间由高至低依次将保存着pc、lr、r12、r11、r10、… r1、r0、CPSR、SPSR。
void *OSTaskStkInit (void (*task)(void *pd), void *pdata, void *ptos, INT16U opt)
{
unsigned int *stk ;
opt = opt; /* 'opt' is not used, prevent warning */
stk = (unsigned int *)ptos; /* Load stack pointer */
&
|