lpc2200移植ucos-II总结(三 编写OS_CPU.h)

2.3 编写OS_CPU.h

1. 不依赖于编译的数据类型

uC/OS-II不使用C语言中的short,int和long等数据类型的定义,因为他们与处理的类型有关,隐含着不可移植性。代之以移植性强的整数数据类型,这样既直观又可移植。

不依赖于编译器的数据类型

typedef  unsigned char  BOOLEAN;

typedef  unsigned char  INT8U

typedef  signed 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

2. 使用软中断SWI做底层接口

为了是底层接口函数与处理器状态无关,同时在任务调用相应的函数不需要知道函数位置,本移植使用软中断指令SWI作为底层接口,使用不同的功能号区分不同的函数。

ADS关键字__swi,用它声明一个不存在的函数,则调用这个函数就在调用这个函数的地方插入一条SWI(ARM指令)指令,并且可以指定功能号。通过__SWI指令声明的函数当程序调用时会跳转到SoferwareInterrupt软件中断的汇编接口。

注:SWI指令用于产生软中断,从而实现从用户模式转变到管理模式。

SWI服务函数

__swi(0x00) void OS_TASK_SW(void);        /*  任务级任务切换函数    */

__swi(0x01) void _OSStartHighRdy(void);   /*  运行优先级最高的任务  */

__swi(0x02) void OS_ENTER_CRITICAL(void); /*  关中断                */

__swi(0x03) void OS_EXIT_CRITICAL(void);  /*  开中断                */

__swi(0x80) void ChangeToSYSMode(void);   /*  任务切换到系统模式    */

__swi(0x81) void ChangeToUSRMode(void);   /*  任务切换到用户模式    */

__swi(0x82) void TaskIsARM(INT8U prio);   /*  任务代码是ARM代码    */

__swi(0x83) void TaskIsTHUMB(INT8U prio); /*  任务代码是THUMB        */  

3. OS_STK_GROWTH指定堆栈的生长方向

为0,表示堆栈从下往上长;

为1,表示堆栈从上往下长

ARM处理器核对两种方式均支持。ADS的C语言编译器,只支持从上往下长。

你可能感兴趣的:(汇编,OS,语言,任务,FP,编译器)