μC/OS-II在S3C44BOX处理器上的移植
③处理器必须支持硬件中断,并且需要一个定时中断源;
④ 处理器需要能够容纳一定数据的硬件堆栈;
⑤处理器需要有能够在CPU寄存器与内核和堆栈交换数据的指令。
S3C44B0X处理器完全满足上述要求。
2 实时内核μC/OS-II在S3C44B0X上的移植
我们使用ARM SDT编译器,移植μC/OS-II主要包括以下几个步骤。
(1)设置OS_CPU.H中与处理器和编译器相关的代码
*************************************************
与编译器相关的数据类型
*************************************************
typedef unsigned char BOOLEAN;
typedef unsigned char INT8U; /*8位无符号整数*/
typedef signed char INT8S; /*8位有符号整数*/
typedef unsigned short INT16U; /*16位有符号整数*/
typedef signed short INT16S; /*16位无符号整数*/
typedef unsigned long INT32U; /*32位无符号整数*/
typedef signed long INT32S; /*32位有符号整数*/
typedef float FP32; /*单精度浮点数*/
typedef double FP64; /*双精度浮点数*/
typedef unsigned int OS_STK;/*堆栈入口宽度为16位*/与ARM处理器相关的代码:
#define OS_ENTER_CRITICAL () ARMEnableInt() /*开启中断*/
#define OS_STK_GROWTH 1 /*堆栈由高地址向低地址增长*/
(2)用C语言编写6个操作系统相关的函数(OS_CPU_C.C)
void OSTaskStkInit(void(task)(void *pd),void *pdata,void *ptos,INT16U opt)
{ unsigned int *stk;
opt =opt; /*因“opt”变量没有用到,防止编译器产生警告*/
stk =(unsigned int *)ptos; /*装载堆栈指针*/
/*为新任务创建上下文*/
*--stk=(unsigned int)task; /*lr*/
*--stk=(unsigned int)task /*pc*/
*--stk=0; /*r12*/
*--stk=0; /*r11*/
*--stk=0; /*r10*/
*--stk=0; /*r9*/
*--stk=0; /*r8*/
*--stk=0; /*r7*/
*--stk=0; /*r6*/
*--stk=0; /*r5*/