os_cpu.h
上传用户:wealth48
上传日期:2022-06-24
资源大小:1701k
文件大小:6k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                               uC/OS-II
  4. *                                        The Real-Time Kernel
  5. *
  6. *                         (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
  7. *                                          All Rights Reserved
  8. *
  9. * File         : OS_CPU.H
  10. * By           : Jean J. Labrosse
  11. *********************************************************************************************************
  12. */
  13. /*
  14. *********************************************************************************************************
  15. *                                               ARM Port
  16. *
  17. *                 Target           : ARM (Includes ARM7, ARM9)
  18. *                 Ported by        : Michael Anburaj
  19. *                 URL              : http://geocities.com/michaelanburaj/    Email : michaelanburaj@hotmail.com
  20. *
  21. *********************************************************************************************************
  22. */
  23. #ifndef __OS_CPU_H__
  24. #define __OS_CPU_H__
  25. #ifdef  OS_CPU_GLOBALS
  26. #define OS_CPU_EXT
  27. #else
  28. #define OS_CPU_EXT  extern
  29. #endif
  30. /*
  31. *********************************************************************************************************
  32. *                                              DATA TYPES
  33. *                                         (Compiler Specific)
  34. *********************************************************************************************************
  35. */
  36. typedef unsigned char  BOOLEAN;
  37. typedef unsigned char  INT8U;                    /* Unsigned  8 bit quantity                           */
  38. typedef signed   char  INT8S;                    /* Signed    8 bit quantity                           */
  39. typedef unsigned short   INT16U;                   /* Unsigned 16 bit quantity                           */
  40. typedef signed   int   INT16S;                   /* Signed   16 bit quantity                           */
  41. typedef unsigned long  INT32U;                   /* Unsigned 32 bit quantity                           */
  42. typedef signed   long  INT32S;                   /* Signed   32 bit quantity                           */
  43. typedef float          FP32;                     /* Single precision floating point                    */
  44. typedef double         FP64;                     /* Double precision floating point                    */
  45. typedef unsigned int   OS_STK;                   /* Each stack entry is 16-bit wide                    */
  46. typedef unsigned int   OS_CPU_SR;                /* Define size of CPU status register (PSR = 32 bits) */
  47. //#define BYTE           INT8S                     /* Define data types for backward compatibility ...   */
  48. #define BYTE           INT8U
  49. #define UBYTE          INT8U                     /* ... to uC/OS V1.xx.  Not actually needed for ...   */
  50. #define WORD           INT16U                    /* ... uC/OS-II.                                      */
  51. #define UWORD          INT16U
  52. #define LONG           INT32S
  53. #define ULONG          INT32U
  54. /* 
  55. *********************************************************************************************************
  56. *                              ARM
  57. *
  58. * Method #1:  Disable/Enable interrupts using simple instructions.  After critical section, interrupts
  59. *             will be enabled even if they were disabled before entering the critical section.
  60. *
  61. * Method #2:  Disable/Enable interrupts by preserving the state of interrupts.  In other words, if 
  62. *             interrupts were disabled before entering the critical section, they will be disabled when
  63. *             leaving the critical section.
  64. *
  65. * Method #3:  Disable/Enable interrupts by preserving the state of interrupts.  Generally speaking you
  66. *             would store the state of the interrupt disable flag in the local variable 'cpu_sr' and then
  67. *             disable interrupts.  'cpu_sr' is allocated in all of uC/OS-II's functions that need to 
  68. *             disable interrupts.  You would restore the interrupt disable state by copying back 'cpu_sr'
  69. *             into the CPU's status register.
  70. *
  71. * Note     :  In this ARM7 Port: Method #1 not implemeted.
  72. *             ------------------------------
  73. *            | Method | SDT 2.51 | ADS 1.2  |
  74. *            |========+==========+==========|
  75. *            |   1    |   N/I    |   N/I    |
  76. *            |   2    |   yes    |   no     |
  77. *            |   3    |   yes    |   yes    |
  78. *             ------------------------------
  79. *
  80. *********************************************************************************************************/
  81. #define  OS_CRITICAL_METHOD    3
  82. #if      OS_CRITICAL_METHOD == 3
  83. /* critical section macros use "method 3" (save to local var "cpu_sr") */
  84. extern int  INTS_OFF(void);      /* ASM routines to twiddle bits */
  85. extern void INTS_ON(void);
  86. #define  OS_ENTER_CRITICAL()  { cpu_sr = INTS_OFF(); }
  87. #define  OS_EXIT_CRITICAL()   { if(cpu_sr == 0) INTS_ON(); }
  88. #else
  89. #error please define critical method
  90. #endif
  91. /*
  92. *********************************************************************************************************
  93. *                           ARM Miscellaneous
  94. *********************************************************************************************************
  95. */
  96. #define  OS_STK_GROWTH        1                       /* Stack grows from HIGH to LOW memory on 80x86  */
  97. //#define  OS_TASK_SW()         OSCtxSw()
  98. /*
  99. *********************************************************************************************************
  100. *                                            GLOBAL VARIABLES
  101. *********************************************************************************************************
  102. */
  103. /*
  104. *********************************************************************************************************
  105. *                                              PROTOTYPES
  106. *********************************************************************************************************
  107. */
  108. #endif /*__OS_CPU_H__*/