os_cpu.h
上传用户:tkwrx3909
上传日期:2015-10-06
资源大小:3310k
文件大小:5k
源码类别:

uCOS

开发平台:

Visual C++

  1. /*
  2. *********************************************************************************************************
  3. *                                               uC/OS-II
  4. *                                        The Real-Time Kernel
  5. *
  6. *                                        Win32 Specific code
  7. *
  8. * This is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU General Public License
  10. *
  11. * File : OS_CPU.H
  12. * By   : Vladimir Antonenko
  13. *
  14. * Rules of use of the given emulation uCOS in Win32:
  15. *
  16. *   1. All Win32-threads which interact with uCOS-tasks should initialize
  17. *      critical section by call OS_INIT_CRITICAL() (if defined USE_CRITICAL_SECTION
  18. *      in os_cpu_c.c). They can be considered as handlers of interrupts.
  19. *   2. Function printf() and it similar should be made in critical section as
  20. *      the console is shared resource and can cause deadlock of tasks ( see osprintf()
  21. *      in the end of file ).
  22. *   3. It is necessary very closely use shared resources of Windows - they can cause
  23. *      blocking of tasks.
  24. *
  25. * The given emulation starts each uCOS-task in separate thread. At any moment of time
  26. * only 0 or one from these threads can be active. (remaining in SUSPEND state, not considering
  27. * two service threads (have priorities 10 and 15). Each thread in SUSPEND state
  28. * must have SUSPEND counter = 1).
  29. *
  30. *********************************************************************************************************
  31. */
  32. #ifndef _OS_CPU_H
  33. #define _OS_CPU_H
  34. #include <stdio.h>
  35. #include <windows.h>
  36. /*
  37. *********************************************************************************************************
  38. *                                              Defines
  39. *********************************************************************************************************
  40. */
  41. //#define _WIN32_WINNT          0x0400 
  42. #define  OS_CPU_EXT           extern
  43. #define  OS_TASK_SW()         SetEvent(OSCtxSwW32Event)
  44. #define  OS_STK_GROWTH        1                             /* Stack grows from HIGH to LOW memory on 80x86  */
  45. /*
  46. *********************************************************************************************************
  47. *                                              GLOBALS
  48. *********************************************************************************************************
  49. */
  50. OS_CPU_EXT  CRITICAL_SECTION  OSCriticalSection;
  51. OS_CPU_EXT  HANDLE            OSCtxSwW32Event;
  52. /*
  53. *********************************************************************************************************
  54. *                                              Prototypes
  55. *********************************************************************************************************
  56. */
  57. void     OS_SLEEP();                             /* Recommend to insert call of this function in Idle task                     */
  58. void     OS_STOP();
  59. int      OS_Printf( char* str, ... );            /* analog of printf, but use critical sections                                */
  60. void     OS_INIT_CRITICAL();
  61. void     OS_ENTER_CRITICAL();
  62. void     OS_EXIT_CRITICAL();
  63. void     OSStartHighRdy();
  64. void     OSIntCtxSw();
  65. /*
  66. *********************************************************************************************************
  67. *                                              DATA TYPES
  68. *                                         (Compiler Specific)
  69. *********************************************************************************************************
  70. */
  71. typedef unsigned char  BOOLEAN;
  72. typedef unsigned char  INT8U;                    /* Unsigned  8 bit quantity                           */
  73. typedef signed   char  INT8S;                    /* Signed    8 bit quantity                           */
  74. typedef unsigned short INT16U;                   /* Unsigned 16 bit quantity                           */
  75. typedef signed   short INT16S;                   /* Signed   16 bit quantity                           */
  76. typedef unsigned long  INT32U;                   /* Unsigned 32 bit quantity                           */
  77. typedef signed   long  INT32S;                   /* Signed   32 bit quantity                           */
  78. typedef float          FP32;                     /* Single precision floating point                    */
  79. typedef double         FP64;                     /* Double precision floating point                    */
  80. typedef unsigned short OS_STK;                   /* Each stack entry is 16-bit wide                    */
  81. #define BYTE           INT8S                     /* Define data types for backward compatibility ...   */
  82. #define UBYTE          INT8U                     /* ... to uC/OS V1.xx.  Not actually needed for ...   */
  83. #define WORD           INT16S                    /* ... uC/OS-II.                                      */
  84. #define UWORD          INT16U
  85. #define LONG           INT32S
  86. #define ULONG          INT32U
  87. typedef struct {
  88.     void    *pData;
  89.     INT16U  Opt;
  90.     void    (*Task)(void*);
  91.     HANDLE  Handle;
  92.     INT32U  Id;
  93.     INT32   Exit;
  94. } OS_EMU_STK;
  95. #endif                                           /*_OS_CPU_H                                                                   */