0512

来源:互联网 发布:淘宝联盟单品推广 编辑:程序博客网 时间:2024/06/14 04:21

OS_CPU.H文件

  1. OS_CPU.H 文件中包含与处理器相关的常量,宏和结构体的定义。程序清单L9.2是为80x86编写的OS_CPU.H文件的内容。  
  2.   
  3. 程序清单L 9.2   OS_CPU.H.  
  4. #ifdef  OS_CPU_GLOBALS  
  5. #define OS_CPU_EXT  
  6. #else  
  7. #define OS_CPU_EXT  extern  
  8. #endif  
  9. /* 
  10. ******************************************************************************* 
  11. *                                 数据类型 
  12. *                            (与编译器相关的内容) 
  13. ******************************************************************************* 
  14. */  
  15.   
  16. typedef unsigned char BOOLEAN;  
  17. typedef unsigned char INT8U;            /* 无符号8位数   (1)*/  
  18. typedef signed   char INT8S;            /* 带符号8位数   */  
  19. typedef unsigned int  INT16U;           /* 无符号16位数  */  
  20. typedef signed   int  INT16S;           /* 带符号16位数  */  
  21. typedef unsigned long INT32U;           /* 无符号32位数  */  
  22. typedef signed   long INT32S;           /* 带符号32位数  */  
  23. typedef float         FP32;      /* 单精度浮点数        */  
  24. typedef double        FP64;      /* 双精度浮点数  */  
  25.   
  26. typedef unsigned int  OS_STK;   /* 堆栈入口宽度为16位   */  
  27.   
  28. #define BYTE   INT8S     /* 以下定义的数据类型是为了与uC/OS V1.xx 兼容 */  
  29. #define UBYTE  INT8U     /*在uC/OS-II中并没有实际的用处     */  
  30. #define WORD   INT16S      
  31. #define UWORD  INT16U  
  32. #define LONG   INT32S  
  33. #define ULONG  INT32U  
  34. /* 
  35. ******************************************************************************* 
  36. *                 Intel 80x86 (实模式, 大模式编译) 
  37. * 
  38. *方法 #1:   用简单指令开关中断。 
  39. *            注意,用方法1关闭中断,从调用函数返回后中断会重新打开! 
  40. *            注意将文件OS_CPU_A.ASM中与OSIntCtxSw()相关的常量从10改到8。 
  41.  
  42. * 
  43.  
  44. * 方法 #2:  关中断前保存中断被关闭的状态. 
  45. *           注意将文件OS_CPU_A.ASM中与OSIntCtxSw()相关的常量从8改到10。 
  46. *   
  47.  
  48. * 
  49. ******************************************************************************* 
  50. */  
  51. #define  OS_CRITICAL_METHOD    2  
  52.   
  53. #if      OS_CRITICAL_METHOD == 1  
  54. #define  OS_ENTER_CRITICAL()  asm  CLI          /* 关闭中断*/  
  55. #define  OS_EXIT_CRITICAL()   asm  STI          /* 打开中断*/  
  56. #endif  
  57.   
  58. #if      OS_CRITICAL_METHOD == 2  
  59. #define  OS_ENTER_CRITICAL()  asm {PUSHF; CLI}  /* 关闭中断 */  
  60. #define  OS_EXIT_CRITICAL()   asm  POPF         /* 打开中断 */  
  61. #endif  
  62.   
  63. /* 
  64. ******************************************************************************* 
  65. *              Intel 80x86 (实模式, 大模式编译) 
  66. ******************************************************************************* 
  67. */  
  68.   
  69. #define  OS_STK_GROWTH   1 /* 堆栈由高地址向低地址增长  (3)*/  
  70.   
  71. #define  uCOS         0x80 /* 中断向量0x80用于任务切换    (4)*/  
  72.   
  73. #define  OS_TASK_SW() asm  INT   uCOS                                      (5)  
  74.   
  75. /* 
  76. ******************************************************************************* 
  77. *                               全局变量 
  78. ******************************************************************************* 
  79. */  
  80.   
  81. OS_CPU_EXT  INT8U  OSTickDOSCtr;   /* 为调用DOS时钟中断而定义的计数器*/  
  82.                                     (6)*/

0 0