OS_CPU.H
上传用户:jyxpgd88
上传日期:2013-04-13
资源大小:90k
文件大小:4k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                               uC/OS-II
  4. *                                        The Real-Time Kernel
  5. *
  6. *                        (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL
  7. *                                          All Rights Reserved
  8. *
  9. *                                       Keil C51 6.20c specific code
  10. *                                          LARGE MEMORY MODEL
  11. *
  12. * File : OS_CPU.H
  13. * By   : Jean J. Labrosse
  14. *
  15. * Ported by:       John X. Liu (johnxliu@163.com)
  16. * Target platform: Keil C51 V6
  17. *********************************************************************************************************
  18. */
  19. #ifndef __OS_CPU_H
  20. #define __OS_CPU_H
  21. #include <reg390.h>
  22. #define TASK_REENTRANT large reentrant
  23. #define KCREENTRANT large reentrant
  24. #ifdef  OS_CPU_GLOBALS
  25. #define OS_CPU_EXT
  26. #else
  27. #define OS_CPU_EXT  extern
  28. #endif
  29. /*
  30. *********************************************************************************************************
  31. *                                              DATA TYPES
  32. *                                         (Compiler Specific)
  33. *********************************************************************************************************
  34. */
  35. typedef unsigned char  BOOLEAN;
  36. typedef unsigned char  INT8U;                    /* Unsigned  8 bit quantity                           */
  37. typedef signed   char  INT8S;                    /* Signed    8 bit quantity                           */
  38. typedef unsigned int   INT16U;                   /* Unsigned 16 bit quantity                           */
  39. typedef signed   int   INT16S;                   /* Signed   16 bit quantity                           */
  40. typedef unsigned long  INT32U;                   /* Unsigned 32 bit quantity                           */
  41. typedef signed   long  INT32S;                   /* Signed   32 bit quantity                           */
  42. typedef float          FP32;                     /* Single precision floating point                    */
  43. typedef unsigned char  OS_STK;                   /* Each stack entry is 8-bit wide                     */
  44. typedef unsigned char  OS_CPU_SR;                /* Define size of CPU status register (PSW = 8 bits)  */
  45. #define BYTE           INT8S                     /* Define data types for backward compatibility ...   */
  46. #define UBYTE          INT8U                     /* ... to uC/OS V1.xx.  Not actually needed for ...   */
  47. #define WORD           INT16S                    /* ... uC/OS-II.                                      */
  48. #define UWORD          INT16U
  49. #define LONG           INT32S
  50. #define ULONG          INT32U
  51. /* 
  52. *********************************************************************************************************
  53. *                              Keil C51 on generic 8051-based microcontroller
  54. *********************************************************************************************************
  55. */
  56. #define  OS_CRITICAL_METHOD    3
  57. #if      OS_CRITICAL_METHOD == 1
  58. #define  OS_ENTER_CRITICAL()  EA=0      /* Disable interrupts                            */
  59. #define  OS_EXIT_CRITICAL()   EA=1   /* Enable  interrupts                            */
  60. #endif
  61. #if      OS_CRITICAL_METHOD == 2
  62. /* As an undocumented keyword of keil c. __asm is supported in Keil C v6.20.
  63. . 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. */
  64. /* A2 AF MOV C, EA*/
  65. /* C2 AF CLR EA   */
  66. /* C0 D0 PUSH PSW */
  67. #define  OS_ENTER_CRITICAL()    __asm DB 0A2H, 0AFH, 0C2H, 0AFH, 0C0H, 0D0H
  68. /* D0 D0 POP PSW   */
  69. /* 92 AF MOV EA, C */
  70. #define  OS_EXIT_CRITICAL()     __asm DB 0D0H, 0D0H, 092H, 0AFH
  71. #endif
  72. #if      OS_CRITICAL_METHOD == 3
  73. #define  OS_ENTER_CRITICAL()  (cpu_sr = EA, EA=0)    /* Disable interrupts                        */
  74. #define  OS_EXIT_CRITICAL()   (EA=cpu_sr)    /* Enable  interrupts                        */
  75. #endif
  76. #define  OS_STK_GROWTH        1                      /* Stack grows from HIGH to LOW memory on for large mode */
  77. #define  OS_TASK_SW()         OSCtxSw()
  78. #define OS_ISR_PROTO_EXT 1
  79. void OSCtxSw(void) KCREENTRANT;
  80. #endif