UC/OS-II 操作系统移植


一.移植相关文件

μC/OS-II的代码包括核心代码(与处理器无关),配置代码(与用户实际应用相关)和移植代码。其中移植μC/OS-II所需的代码是移植代码,移植代码包括1个汇编文件(OS_CPU_A.ASM),1个C程序文件(OS_CPU_C.C)和1个头文件(OS_CPU.H)。由于Keil  uVision3编译器默认汇编文件后缀名为“S”,所以移植代码OS_CPU_A.ASM改名为OS_CPU_A.S。

uC/OS-II核心代码与处理器无关,所以不管移植到哪个板子上,它们都是不用修改的,可直接粘贴过去。

我们主要的工作是OS_CPU.H,OS_CPU_A.ASM(在Keil 中为OS_CPU_A.S)和OS_CPU_C.C因为它们是处理器相关的。

1.   OS_CUP.H

先看下代码:

  1. /***************************************Copyright (c)******************************************** 
  2. **                                       西安邮电学院 
  3. **                                        XNMS项目组 
  4. **                                         
  5. ** 
  6. **                               http://blog.csdn.net/tigerjb 
  7. ** 
  8. **-----------------------------------------文件信息------------------------------------------------------ 
  9. **文   件   名: os_cpu.h 
  10. **创   建   人: 冀博 
  11. **最后修改日期: 2010年1月14日 
  12. **描        述: μCOS-II在LPC210x上的移植代码CPU配置部分,用Keil  uVision3编译 
  13. ********************************************************************************************************/ 
  14.  
  15. #ifdef  OS_CPU_GLOBALS  
  16. #define OS_CPU_EXT  
  17. #else  
  18. #define OS_CPU_EXT  extern  
  19. #endif   
  20.   
  21. /********************************************************************************************************** 
  22. *                    定义与编译器无关的数据类型 
  23. **********************************************************************************************************/  
  24.   
  25. typedef unsigned char  BOOLEAN;                 /* 布尔变量                                 */  
  26. typedef unsigned char  INT8U;                   /* 无符号8位整型变量                        */  
  27. typedef signed   char  INT8S;                   /* 有符号8位整型变量                        */  
  28. typedef unsigned short INT16U;                  /* 无符号16位整型变量                       */  
  29. typedef signed   short INT16S;                  /* 有符号16位整型变量                       */  
  30. typedef unsigned int   INT32U;                  /* 无符号32位整型变量                       */  
  31. typedef signed   int   INT32S;                  /* 有符号32位整型变量                       */  
  32. typedef float          FP32;                    /* 单精度浮点数(32位长度)                 */  
  33. typedef double         FP64;                    /* 双精度浮点数(64位长度)                 */  
  34.   
  35. typedef INT32U         OS_STK;                  /* 堆栈是32位宽度                           */  
  36.   
  37. /* 以下是兼容UC/OS V1.XX的数据类型,在uC/OS-II没有使用  */ 
  38. #define BYTE           INT8S  
  39. #define UBYTE          INT8U  
  40. #define WORD           INT16S  
  41. #define UWORD          INT16U  
  42. #define LONG           INT32S  
  43. #define ULONG          INT32U   
  44.   
  45. /* ********************************************************************************************************* 
  46. *                    与ARM7体系结构相关的一些定义 
  47. **********************************************************************************************************/ 
  48. #define     OS_CRITICAL_METHOD     2            /* 选择开、关中断的方式 */   
  49.   
  50.   
  51. __swi(0x00) void OS_TASK_SW(void);              /*  任务级任务切换函数          */  
  52. __swi(0x01) void _OSStartHighRdy(void);         /*  运行优先级最高的任务        */  
  53. __swi(0x02) void OS_ENTER_CRITICAL(void);       /*  关中断                      */  
  54. __swi(0x03) void OS_EXIT_CRITICAL(void);        /*  开中断                      */  
  55.   
  56. __swi(0x40) void *GetOSFunctionAddr(int Index); /*  获取系统服务函数入口        */  
  57. __swi(0x41) void *GetUsrFunctionAddr(int Index);/*  获取自定义服务函数入口      */  
  58. __swi(0x42) void OSISRBegin(void);              /*  中断开始处理                */  
  59. __swi(0x43) int  OSISRNeedSwap(void);           /*  判断中断是否需要切换        */  
  60.   
  61. __swi(0x80) void ChangeToSYSMode(void);         /*  任务切换到系统模式          */  
  62. __swi(0x81) void ChangeToUSRMode(void);         /*  任务切换到用户模式          */  
  63. __swi(0x82) void TaskIsARM(INT8U prio);         /*  任务代码是ARM代码           */  
  64. __swi(0x83) void TaskIsTHUMB(INT8U prio);       /*  任务代码是THUMB             */ 
  65.  
  66. #define OS_STK_GROWTH    1                      /*  堆栈是从上往下长的          */  
  67.  
  68. #define     USR32Mode       0x10                /*  用户模式                    */  
  69. #define     SYS32Mode       0x1f                /*  系统模式                    */  
  70. #define     NoInt           0x80  
  71.  
  72. #ifndef USER_USING_MODE  
  73. #define USER_USING_MODE USR32Mode               /*  任务缺省模式                 */  
  74. #endif  
  75.  
  76. #ifndef OS_SELF_EN  
  77. #define OS_SELF_EN     0                        /*  允许返回OS与任务分别编译、固化*/      
  78. #endif   
  79.   
  80.   
  81. OS_CPU_EXT INT32U OsEnterSum;                   /*  关中断计数器(开关中断的信号量)    */  
  • 1
  • 2
  • 下一页

相关内容