OS_CPU.H
上传用户:tzjinxin1
上传日期:2022-08-08
资源大小:272k
文件大小:4k
开发平台:

Visual C++

  1. /*
  2. *********************************************************************************************************
  3. *                                               uC/OS-II
  4. *                                               实时内核
  5. *
  6. *                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
  7. *                                               版权所有
  8. *
  9. *                                            MCU-51 专用代码
  10. *                                           KEIL C51大模式编译
  11. *
  12. * 文件名 : OS_CPU.H
  13. * 作者   : Jean J. Labrosse
  14. * 改编   : 杨屹 gdtyy@ri.gdt.com.cn 巨龙公司系统集成开发部
  15. * 改编   : 钟文青,升级到ucOS-II V2.51
  16. *********************************************************************************************************
  17. */
  18. #ifndef __OS_CPU_H
  19. #define __OS_CPU_H
  20. #ifdef  OS_CPU_GLOBALS
  21. #define OS_CPU_EXT
  22. #else
  23. #define OS_CPU_EXT  extern
  24. #endif
  25. /*
  26. *********************************************************************************************************
  27. *                                       数据类型
  28. *                                     (编译器相关)
  29. *********************************************************************************************************
  30. */
  31. //详见C51.PDF第176页
  32. typedef unsigned char  BOOLEAN;       //注意:不要使用bit定义,因为在结构体里无法使用
  33. typedef unsigned char  INT8U;         //无符号8位数
  34. typedef signed   char  INT8S;         //有符号8位数
  35. typedef unsigned int   INT16U;        //无符号16位数
  36. typedef signed   int   INT16S;        //有符号16位数
  37. typedef unsigned long  INT32U;        //无符号32位数
  38. typedef signed   long  INT32S;        //有符号32位数
  39. typedef float          FP32;          //单精度浮点数
  40. typedef double         FP64;          //双精度浮点数
  41. typedef unsigned char  OS_STK;        //栈单元宽度为8比特
  42. typedef unsigned char  OS_CPU_SR;     /* Define size of CPU status register (PSW = 8 bits)  */
  43. #define BYTE           INT8S          //兼容以前版本的数据类型
  44. #define UBYTE          INT8U          //uC/OS-II可以不用这些数据类型
  45. #define WORD           INT16S
  46. #define UWORD          INT16U
  47. #define LONG           INT32S
  48. #define ULONG          INT32U
  49. /* 
  50. *********************************************************************************************************
  51. *                              处理器相关代码 MCU-51 (大模式)
  52. * 针对51单片机,只使用方法1(直接开关中断)
  53. *********************************************************************************************************
  54. */
  55. #define  OS_CRITICAL_METHOD    1
  56. #if      OS_CRITICAL_METHOD == 1
  57. #define  OS_ENTER_CRITICAL()  EA=0    //关中断
  58. #define  OS_EXIT_CRITICAL()   EA=1    //开中断
  59. #endif
  60. #if      OS_CRITICAL_METHOD == 2
  61. /* As an undocumented keyword of keil c. __asm is supported in Keil C v6.20.
  62. . No other means to define assemble language code in a macro, I have to use it here. If your compiler does not support __asm, use method 1 or 3 then. */
  63. /* A2 AF MOV C, EA*/
  64. /* C2 AF CLR EA   */
  65. /* C0 D0 PUSH PSW */
  66. #define  OS_ENTER_CRITICAL()    __asm DB 0A2H, 0AFH, 0C2H, 0AFH, 0C0H, 0D0H
  67. /* D0 D0 POP PSW   */
  68. /* 92 AF MOV EA, C */
  69. #define  OS_EXIT_CRITICAL()     __asm DB 0D0H, 0D0H, 092H, 0AFH
  70. #endif
  71. #if      OS_CRITICAL_METHOD == 3
  72. #define  OS_ENTER_CRITICAL()  (cpu_sr = EA, EA=0)   /* Disable interrupts  */
  73. #define  OS_EXIT_CRITICAL()   (EA=cpu_sr)     /* Enable  interrupts  */
  74. #endif
  75. #define  OS_STK_GROWTH    0           //MCU-51堆栈从下往上增长  1=向下,0=向上
  76. #define  OS_TASK_SW()     OSCtxSw()   //因为MCU-51没有软中断指令,所以用程序调用代替。两者的堆栈格式相同,
  77.                                       //RETI指令复位中断系统,RET则没有。实践表明,对于MCU-51,用子程序调
  78.                                       //用入栈,用中断返回指令RETI出栈是没有问题的,反之中断入栈RET出栈则
  79.                                       //不行。总之,对于入栈,子程序调用与中断调用效果是一样的,可以混用。
  80.                                       //在没有中断发生的情况下复位中断系统也不会影响系统正常运行。
  81.                                       //详见《uC/OS-II》第八章193页第12行
  82.                                       
  83. #define OS_ISR_PROTO_EXT 1
  84. void OSCtxSw(void);
  85. void InitHardware(void) reentrant;    //初始化硬件时钟中断等,系统初始化工作
  86. #endif //_OS_CPU_H