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

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/OS-II
  4. *                                          The Real-Time Kernel
  5. *
  6. *                            (c) Copyright 1992-2003, Jean J. Labrosse, Weston, FL
  7. *                                           All Rights Reserved
  8. *
  9. * File : uCOS_II.H
  10. * By   : Jean J. Labrosse
  11. *********************************************************************************************************
  12. */
  13. #ifndef  OS_uCOS_II_H
  14. #define  OS_uCOS_II_H
  15. #include  <os_cpu.h>
  16. #include  <os_cfg.h>
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. /*
  21. *********************************************************************************************************
  22. *                                             MISCELLANEOUS
  23. *********************************************************************************************************
  24. */
  25. #define  OS_VERSION              270u                   /* Version of uC/OS-II (Vx.yy mult. by 100)    */
  26. #ifdef   OS_GLOBALS
  27. #define  OS_EXT
  28. #else
  29. #define  OS_EXT  extern
  30. #endif
  31. #ifndef  FALSE
  32. #define  FALSE                     0
  33. #endif
  34. #ifndef  TRUE
  35. #define  TRUE                      1
  36. #endif
  37. #define  OS_ASCII_NUL        (char)0
  38. #define  OS_PRIO_SELF           0xFF                    /* Indicate SELF priority                      */
  39. #if OS_TASK_STAT_EN > 0
  40. #define  OS_N_SYS_TASKS            2                    /* Number of system tasks                      */
  41. #else
  42. #define  OS_N_SYS_TASKS            1
  43. #endif
  44. #define  OS_STAT_PRIO       (OS_LOWEST_PRIO - 1)        /* Statistic task priority                     */
  45. #define  OS_IDLE_PRIO       (OS_LOWEST_PRIO)            /* IDLE      task priority                     */
  46. #define  OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1)   /* Size of event table                         */
  47. #define  OS_RDY_TBL_SIZE   ((OS_LOWEST_PRIO) / 8 + 1)   /* Size of ready table                         */
  48. #define  OS_TASK_IDLE_ID       65535u                   /* I.D. numbers for Idle and Stat tasks        */
  49. #define  OS_TASK_STAT_ID       65534u
  50. #define  OS_EVENT_EN       (((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0))
  51. /*$PAGE*/
  52. /*
  53. *********************************************************************************************************
  54. *                              TASK STATUS (Bit definition for OSTCBStat)
  55. *********************************************************************************************************
  56. */
  57. #define  OS_STAT_RDY            0x00        /* Ready to run                                            */
  58. #define  OS_STAT_SEM            0x01        /* Pending on semaphore                                    */
  59. #define  OS_STAT_MBOX           0x02        /* Pending on mailbox                                      */
  60. #define  OS_STAT_Q              0x04        /* Pending on queue                                        */
  61. #define  OS_STAT_SUSPEND        0x08        /* Task is suspended                                       */
  62. #define  OS_STAT_MUTEX          0x10        /* Pending on mutual exclusion semaphore                   */
  63. #define  OS_STAT_FLAG           0x20        /* Pending on event flag group                             */
  64. /*
  65. *********************************************************************************************************
  66. *                                        OS_EVENT types
  67. *********************************************************************************************************
  68. */
  69. #define  OS_EVENT_TYPE_UNUSED      0
  70. #define  OS_EVENT_TYPE_MBOX        1
  71. #define  OS_EVENT_TYPE_Q           2
  72. #define  OS_EVENT_TYPE_SEM         3
  73. #define  OS_EVENT_TYPE_MUTEX       4
  74. #define  OS_EVENT_TYPE_FLAG        5
  75. /*
  76. *********************************************************************************************************
  77. *                                         EVENT FLAGS
  78. *********************************************************************************************************
  79. */
  80. #define  OS_FLAG_WAIT_CLR_ALL      0        /* Wait for ALL    the bits specified to be CLR (i.e. 0)   */ 
  81. #define  OS_FLAG_WAIT_CLR_AND      0
  82. #define  OS_FLAG_WAIT_CLR_ANY      1        /* Wait for ANY of the bits specified to be CLR (i.e. 0)   */
  83. #define  OS_FLAG_WAIT_CLR_OR       1
  84. #define  OS_FLAG_WAIT_SET_ALL      2        /* Wait for ALL    the bits specified to be SET (i.e. 1)   */ 
  85. #define  OS_FLAG_WAIT_SET_AND      2
  86. #define  OS_FLAG_WAIT_SET_ANY      3        /* Wait for ANY of the bits specified to be SET (i.e. 1)   */
  87. #define  OS_FLAG_WAIT_SET_OR       3
  88. #define  OS_FLAG_CONSUME        0x80        /* Consume the flags if condition(s) satisfied             */
  89. #define  OS_FLAG_CLR               0
  90. #define  OS_FLAG_SET               1
  91. /*
  92. *********************************************************************************************************
  93. *                                   Values for OSTickStepState
  94. *
  95. * Note(s): This feature is used by uC/OS-View.
  96. *********************************************************************************************************
  97. */
  98. #if OS_TICK_STEP_EN > 0
  99. #define  OS_TICK_STEP_DIS          0        /* Stepping is disabled, tick runs as mormal               */
  100. #define  OS_TICK_STEP_WAIT         1        /* Waiting for uC/OS-View to set OSTickStepState to _ONCE  */
  101. #define  OS_TICK_STEP_ONCE         2        /* Process tick once and wait for next cmd from uC/OS-View */
  102. #endif
  103. /*
  104. *********************************************************************************************************
  105. *       Possible values for 'opt' argument of OSSemDel(), OSMboxDel(), OSQDel() and OSMutexDel()
  106. *********************************************************************************************************
  107. */
  108. #define  OS_DEL_NO_PEND            0
  109. #define  OS_DEL_ALWAYS             1
  110. /*
  111. *********************************************************************************************************
  112. *                                     OS???PostOpt() OPTIONS
  113. *
  114. * These #defines are used to establish the options for OSMboxPostOpt() and OSQPostOpt().
  115. *********************************************************************************************************
  116. */
  117. #define  OS_POST_OPT_NONE       0x00        /* Post to highest priority task waiting                   */
  118. #define  OS_POST_OPT_BROADCAST  0x01        /* Broadcast message to ALL tasks waiting                  */  
  119. #define  OS_POST_OPT_FRONT      0x02        /* Post to highest priority task waiting                   */
  120. /*
  121. *********************************************************************************************************
  122. *                                 TASK OPTIONS (see OSTaskCreateExt()) 
  123. *********************************************************************************************************
  124. */
  125. #define  OS_TASK_OPT_STK_CHK  0x0001        /* Enable stack checking for the task                      */
  126. #define  OS_TASK_OPT_STK_CLR  0x0002        /* Clear the stack when the task is create                 */
  127. #define  OS_TASK_OPT_SAVE_FP  0x0004        /* Save the contents of any floating-point registers       */
  128. /*
  129. *********************************************************************************************************
  130. *                                             ERROR CODES
  131. *********************************************************************************************************
  132. */
  133. #define OS_NO_ERR                     0
  134. #define OS_ERR_EVENT_TYPE             1u
  135. #define OS_ERR_PEND_ISR               2u
  136. #define OS_ERR_POST_NULL_PTR          3u
  137. #define OS_ERR_PEVENT_NULL            4u
  138. #define OS_ERR_POST_ISR               5u
  139. #define OS_ERR_QUERY_ISR              6u
  140. #define OS_ERR_INVALID_OPT            7u
  141. #define OS_ERR_TASK_WAITING           8u
  142. #define OS_TIMEOUT                   10u
  143. #define OS_TASK_NOT_EXIST            11u
  144. #define OS_ERR_EVENT_NAME_TOO_LONG   12u
  145. #define OS_ERR_FLAG_NAME_TOO_LONG    13u
  146. #define OS_ERR_TASK_NAME_TOO_LONG    14u
  147. #define OS_ERR_PNAME_NULL            15u
  148. #define OS_MBOX_FULL                 20u
  149. #define OS_Q_FULL                    30u
  150. #define OS_Q_EMPTY                   31u
  151. #define OS_PRIO_EXIST                40u
  152. #define OS_PRIO_ERR                  41u
  153. #define OS_PRIO_INVALID              42u
  154. #define OS_SEM_OVF                   50u
  155. #define OS_TASK_DEL_ERR              60u
  156. #define OS_TASK_DEL_IDLE             61u
  157. #define OS_TASK_DEL_REQ              62u
  158. #define OS_TASK_DEL_ISR              63u
  159. #define OS_NO_MORE_TCB               70u
  160. #define OS_TIME_NOT_DLY              80u
  161. #define OS_TIME_INVALID_MINUTES      81u
  162. #define OS_TIME_INVALID_SECONDS      82u
  163. #define OS_TIME_INVALID_MILLI        83u
  164. #define OS_TIME_ZERO_DLY             84u
  165. #define OS_TASK_SUSPEND_PRIO         90u
  166. #define OS_TASK_SUSPEND_IDLE         91u
  167. #define OS_TASK_RESUME_PRIO         100u
  168. #define OS_TASK_NOT_SUSPENDED       101u
  169. #define OS_MEM_INVALID_PART         110u
  170. #define OS_MEM_INVALID_BLKS         111u
  171. #define OS_MEM_INVALID_SIZE         112u
  172. #define OS_MEM_NO_FREE_BLKS         113u
  173. #define OS_MEM_FULL                 114u
  174. #define OS_MEM_INVALID_PBLK         115u
  175. #define OS_MEM_INVALID_PMEM         116u
  176. #define OS_MEM_INVALID_PDATA        117u
  177. #define OS_MEM_INVALID_ADDR         118u
  178. #define OS_MEM_NAME_TOO_LONG        119u
  179. #define OS_ERR_NOT_MUTEX_OWNER      120u
  180. #define OS_TASK_OPT_ERR             130u
  181. #define OS_ERR_DEL_ISR              140u
  182. #define OS_ERR_CREATE_ISR           141u
  183. #define OS_FLAG_INVALID_PGRP        150u
  184. #define OS_FLAG_ERR_WAIT_TYPE       151u
  185. #define OS_FLAG_ERR_NOT_RDY         152u
  186. #define OS_FLAG_INVALID_OPT         153u
  187. #define OS_FLAG_GRP_DEPLETED        154u
  188. /*$PAGE*/
  189. /*
  190. *********************************************************************************************************
  191. *                                          EVENT CONTROL BLOCK
  192. *********************************************************************************************************
  193. */
  194. #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
  195. typedef struct os_event {
  196.     INT8U    OSEventType;                    /* Type of event control block (see OS_EVENT_TYPE_???)     */
  197.     INT8U    OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  198.     INT16U   OSEventCnt;                     /* Semaphore Count (not used if other EVENT type)          */
  199.     void    *OSEventPtr;                     /* Pointer to message or queue structure                   */
  200.     INT8U    OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  201. #if OS_EVENT_NAME_SIZE > 1
  202.     char     OSEventName[OS_EVENT_NAME_SIZE];
  203. #endif
  204. } OS_EVENT;
  205. #endif
  206. /*
  207. *********************************************************************************************************
  208. *                                       EVENT FLAGS CONTROL BLOCK
  209. *********************************************************************************************************
  210. */
  211. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  212. typedef struct os_flag_grp {                /* Event Flag Group                                        */
  213.     INT8U         OSFlagType;               /* Should be set to OS_EVENT_TYPE_FLAG                     */
  214.     void         *OSFlagWaitList;           /* Pointer to first NODE of task waiting on event flag     */
  215.     OS_FLAGS      OSFlagFlags;              /* 8, 16 or 32 bit flags                                   */
  216. #if OS_FLAG_NAME_SIZE > 1
  217.     char          OSFlagName[OS_FLAG_NAME_SIZE];
  218. #endif
  219. } OS_FLAG_GRP;    
  220.     
  221.     
  222. typedef struct os_flag_node {               /* Event Flag Wait List Node                               */
  223.     void         *OSFlagNodeNext;           /* Pointer to next     NODE in wait list                   */
  224.     void         *OSFlagNodePrev;           /* Pointer to previous NODE in wait list                   */
  225.     void         *OSFlagNodeTCB;            /* Pointer to TCB of waiting task                          */  
  226.     void         *OSFlagNodeFlagGrp;        /* Pointer to Event Flag Group                             */  
  227.     OS_FLAGS      OSFlagNodeFlags;          /* Event flag to wait on                                   */  
  228.     INT8U         OSFlagNodeWaitType;       /* Type of wait:                                           */
  229.                                             /*      OS_FLAG_WAIT_AND                                   */
  230.                                             /*      OS_FLAG_WAIT_ALL                                   */
  231.                                             /*      OS_FLAG_WAIT_OR                                    */
  232.                                             /*      OS_FLAG_WAIT_ANY                                   */
  233. } OS_FLAG_NODE;
  234. #endif
  235. /*$PAGE*/
  236. /*
  237. *********************************************************************************************************
  238. *                                          MESSAGE MAILBOX DATA
  239. *********************************************************************************************************
  240. */
  241. #if OS_MBOX_EN > 0
  242. typedef struct os_mbox_data {
  243.     void   *OSMsg;                         /* Pointer to message in mailbox                            */
  244.     INT8U   OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur                 */
  245.     INT8U   OSEventGrp;                    /* Group corresponding to tasks waiting for event to occur  */
  246. } OS_MBOX_DATA;
  247. #endif
  248. /*
  249. *********************************************************************************************************
  250. *                                     MEMORY PARTITION DATA STRUCTURES
  251. *********************************************************************************************************
  252. */
  253. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  254. typedef struct os_mem {                   /* MEMORY CONTROL BLOCK                                      */
  255.     void   *OSMemAddr;                    /* Pointer to beginning of memory partition                  */
  256.     void   *OSMemFreeList;                /* Pointer to list of free memory blocks                     */
  257.     INT32U  OSMemBlkSize;                 /* Size (in bytes) of each block of memory                   */
  258.     INT32U  OSMemNBlks;                   /* Total number of blocks in this partition                  */
  259.     INT32U  OSMemNFree;                   /* Number of memory blocks remaining in this partition       */
  260. #if OS_MEM_NAME_SIZE > 1
  261.     char    OSMemName[OS_MEM_NAME_SIZE];  /* Memory partition name                                     */
  262. #endif
  263. } OS_MEM;
  264. typedef struct os_mem_data {
  265.     void   *OSAddr;                    /* Pointer to the beginning address of the memory partition     */
  266.     void   *OSFreeList;                /* Pointer to the beginning of the free list of memory blocks   */
  267.     INT32U  OSBlkSize;                 /* Size (in bytes) of each memory block                         */
  268.     INT32U  OSNBlks;                   /* Total number of blocks in the partition                      */
  269.     INT32U  OSNFree;                   /* Number of memory blocks free                                 */
  270.     INT32U  OSNUsed;                   /* Number of memory blocks used                                 */
  271. } OS_MEM_DATA;
  272. #endif
  273. /*$PAGE*/
  274. /*
  275. *********************************************************************************************************
  276. *                                    MUTUAL EXCLUSION SEMAPHORE DATA
  277. *********************************************************************************************************
  278. */
  279. #if OS_MUTEX_EN > 0
  280. typedef struct os_mutex_data {
  281.     INT8U   OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  282.     INT8U   OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  283.     INT8U   OSValue;                        /* Mutex value (0 = used, 1 = available)                   */
  284.     INT8U   OSOwnerPrio;                    /* Mutex owner's task priority or 0xFF if no owner         */
  285.     INT8U   OSMutexPIP;                     /* Priority Inheritance Priority or 0xFF if no owner       */
  286. } OS_MUTEX_DATA;
  287. #endif
  288. /*
  289. *********************************************************************************************************
  290. *                                          MESSAGE QUEUE DATA
  291. *********************************************************************************************************
  292. */
  293. #if OS_Q_EN > 0
  294. typedef struct os_q {                   /* QUEUE CONTROL BLOCK                                         */
  295.     struct os_q   *OSQPtr;              /* Link to next queue control block in list of free blocks     */
  296.     void         **OSQStart;            /* Pointer to start of queue data                              */
  297.     void         **OSQEnd;              /* Pointer to end   of queue data                              */
  298.     void         **OSQIn;               /* Pointer to where next message will be inserted  in   the Q  */
  299.     void         **OSQOut;              /* Pointer to where next message will be extracted from the Q  */
  300.     INT16U         OSQSize;             /* Size of queue (maximum number of entries)                   */
  301.     INT16U         OSQEntries;          /* Current number of entries in the queue                      */
  302. } OS_Q;
  303. typedef struct os_q_data {
  304.     void          *OSMsg;               /* Pointer to next message to be extracted from queue          */
  305.     INT16U         OSNMsgs;             /* Number of messages in message queue                         */
  306.     INT16U         OSQSize;             /* Size of message queue                                       */
  307.     INT8U          OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur         */
  308.     INT8U          OSEventGrp;          /* Group corresponding to tasks waiting for event to occur     */
  309. } OS_Q_DATA;
  310. #endif
  311. /*
  312. *********************************************************************************************************
  313. *                                           SEMAPHORE DATA
  314. *********************************************************************************************************
  315. */
  316. #if OS_SEM_EN > 0
  317. typedef struct os_sem_data {
  318.     INT16U  OSCnt;                          /* Semaphore count                                         */
  319.     INT8U   OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  320.     INT8U   OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  321. } OS_SEM_DATA;
  322. #endif
  323. /*
  324. *********************************************************************************************************
  325. *                                            TASK STACK DATA
  326. *********************************************************************************************************
  327. */
  328. #if OS_TASK_CREATE_EXT_EN > 0
  329. typedef struct os_stk_data {
  330.     INT32U  OSFree;                    /* Number of free bytes on the stack                            */
  331.     INT32U  OSUsed;                    /* Number of bytes used on the stack                            */
  332. } OS_STK_DATA;
  333. #endif
  334. /*$PAGE*/
  335. /*
  336. *********************************************************************************************************
  337. *                                          TASK CONTROL BLOCK
  338. *********************************************************************************************************
  339. */
  340. typedef struct os_tcb {
  341.     OS_STK          *OSTCBStkPtr;      /* Pointer to current top of stack                              */
  342. #if OS_TASK_CREATE_EXT_EN > 0
  343.     void            *OSTCBExtPtr;      /* Pointer to user definable data for TCB extension             */
  344.     OS_STK          *OSTCBStkBottom;   /* Pointer to bottom of stack                                   */
  345.     INT32U           OSTCBStkSize;     /* Size of task stack (in number of stack elements)             */
  346.     INT16U           OSTCBOpt;         /* Task options as passed by OSTaskCreateExt()                  */
  347.     INT16U           OSTCBId;          /* Task ID (0..65535)                                           */
  348. #endif
  349.     struct os_tcb   *OSTCBNext;        /* Pointer to next     TCB in the TCB list                      */
  350.     struct os_tcb   *OSTCBPrev;        /* Pointer to previous TCB in the TCB list                      */
  351. #if OS_EVENT_EN > 0
  352.     OS_EVENT        *OSTCBEventPtr;    /* Pointer to event control block                               */
  353. #endif
  354. #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
  355.     void            *OSTCBMsg;         /* Message received from OSMboxPost() or OSQPost()              */
  356. #endif
  357. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  358. #if OS_TASK_DEL_EN > 0
  359.     OS_FLAG_NODE    *OSTCBFlagNode;    /* Pointer to event flag node                                   */
  360. #endif    
  361.     OS_FLAGS         OSTCBFlagsRdy;    /* Event flags that made task ready to run                      */
  362. #endif
  363.     INT16U           OSTCBDly;         /* Nbr ticks to delay task or, timeout waiting for event        */
  364.     INT8U            OSTCBStat;        /* Task status                                                  */
  365.     INT8U            OSTCBPrio;        /* Task priority (0 == highest, 63 == lowest)                   */
  366.     INT8U            OSTCBX;           /* Bit position in group  corresponding to task priority (0..7) */
  367.     INT8U            OSTCBY;           /* Index into ready table corresponding to task priority        */
  368.     INT8U            OSTCBBitX;        /* Bit mask to access bit position in ready table               */
  369.     INT8U            OSTCBBitY;        /* Bit mask to access bit position in ready group               */
  370. #if OS_TASK_DEL_EN > 0
  371.     BOOLEAN          OSTCBDelReq;      /* Indicates whether a task needs to delete itself              */
  372. #endif
  373. #if OS_TASK_PROFILE_EN > 0
  374.     INT32U           OSTCBCtxSwCtr;    /* Number of time the task was switched in                      */
  375.     INT32U           OSTCBCyclesTot;   /* Total number of clock cycles the task has been running       */
  376.     INT32U           OSTCBCyclesStart; /* Snapshot of cycle counter at start of task resumption        */
  377.     OS_STK          *OSTCBStkBase;     /* Pointer to the beginning of the task stack                   */
  378.     INT32U           OSTCBStkUsed;     /* Number of bytes used from the stack                          */
  379. #endif
  380. #if OS_TASK_NAME_SIZE > 1
  381.     char             OSTCBTaskName[OS_TASK_NAME_SIZE];
  382. #endif
  383. } OS_TCB;
  384. /*$PAGE*/
  385. /*
  386. *********************************************************************************************************
  387. *                                            GLOBAL VARIABLES
  388. *********************************************************************************************************
  389. */
  390. OS_EXT  INT32U            OSCtxSwCtr;               /* Counter of number of context switches           */
  391. #if (OS_EVENT_EN > 0) && (OS_MAX_EVENTS > 0)
  392. OS_EXT  OS_EVENT         *OSEventFreeList;          /* Pointer to list of free EVENT control blocks    */
  393. OS_EXT  OS_EVENT          OSEventTbl[OS_MAX_EVENTS];/* Table of EVENT control blocks                   */
  394. #endif
  395. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  396. OS_EXT  OS_FLAG_GRP       OSFlagTbl[OS_MAX_FLAGS];  /* Table containing event flag groups              */
  397. OS_EXT  OS_FLAG_GRP      *OSFlagFreeList;           /* Pointer to free list of event flag groups       */
  398. #endif
  399. #if OS_TASK_STAT_EN > 0
  400. OS_EXT  INT8S             OSCPUUsage;               /* Percentage of CPU used                          */
  401. OS_EXT  INT32U            OSIdleCtrMax;             /* Max. value that idle ctr can take in 1 sec.     */
  402. OS_EXT  INT32U            OSIdleCtrRun;             /* Val. reached by idle ctr at run time in 1 sec.  */
  403. OS_EXT  BOOLEAN           OSStatRdy;                /* Flag indicating that the statistic task is rdy  */
  404. OS_EXT  OS_STK            OSTaskStatStk[OS_TASK_STAT_STK_SIZE];      /* Statistics task stack          */
  405. #endif
  406. OS_EXT  INT8U             OSIntNesting;             /* Interrupt nesting level                         */
  407. OS_EXT  INT8U             OSIntExitY;
  408. OS_EXT  INT8U             OSLockNesting;            /* Multitasking lock nesting level                 */
  409. OS_EXT  INT8U             OSPrioCur;                /* Priority of current task                        */
  410. OS_EXT  INT8U             OSPrioHighRdy;            /* Priority of highest priority task               */
  411. OS_EXT  INT8U             OSRdyGrp;                        /* Ready list group                         */
  412. OS_EXT  INT8U             OSRdyTbl[OS_RDY_TBL_SIZE];       /* Table of tasks which are ready to run    */
  413. OS_EXT  BOOLEAN           OSRunning;                       /* Flag indicating that kernel is running   */
  414. OS_EXT  INT8U             OSTaskCtr;                       /* Number of tasks created                  */
  415. OS_EXT  volatile  INT32U  OSIdleCtr;                                 /* Idle counter                   */
  416. OS_EXT  OS_STK            OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE];      /* Idle task stack                */
  417. OS_EXT  OS_TCB           *OSTCBCur;                        /* Pointer to currently running TCB         */
  418. OS_EXT  OS_TCB           *OSTCBFreeList;                   /* Pointer to list of free TCBs             */
  419. OS_EXT  OS_TCB           *OSTCBHighRdy;                    /* Pointer to highest priority TCB R-to-R   */
  420. OS_EXT  OS_TCB           *OSTCBList;                       /* Pointer to doubly linked list of TCBs    */
  421. OS_EXT  OS_TCB           *OSTCBPrioTbl[OS_LOWEST_PRIO + 1];/* Table of pointers to created TCBs        */
  422. OS_EXT  OS_TCB            OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS];   /* Table of TCBs                  */
  423. #if OS_TICK_STEP_EN > 0
  424. OS_EXT  INT8U             OSTickStepState;          /* Indicates the state of the tick step feature    */
  425. #endif
  426. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  427. OS_EXT  OS_MEM           *OSMemFreeList;            /* Pointer to free list of memory partitions       */
  428. OS_EXT  OS_MEM            OSMemTbl[OS_MAX_MEM_PART];/* Storage for memory partition manager            */
  429. #endif
  430. #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
  431. OS_EXT  OS_Q             *OSQFreeList;              /* Pointer to list of free QUEUE control blocks    */
  432. OS_EXT  OS_Q              OSQTbl[OS_MAX_QS];        /* Table of QUEUE control blocks                   */
  433. #endif
  434. #if OS_TIME_GET_SET_EN > 0   
  435. OS_EXT  volatile  INT32U  OSTime;                   /* Current value of system time (in ticks)         */
  436. #endif
  437. extern  INT8U   const     OSMapTbl[8];              /* Priority->Bit Mask lookup table                 */
  438. extern  INT8U   const     OSUnMapTbl[256];          /* Priority->Index    lookup table                 */
  439. /*$PAGE*/
  440. /*
  441. *********************************************************************************************************
  442. *                                          FUNCTION PROTOTYPES
  443. *                                     (Target Independent Functions)
  444. *********************************************************************************************************
  445. */
  446. /*
  447. *********************************************************************************************************
  448. *                                            MISCELLANEOUS
  449. *********************************************************************************************************
  450. */
  451. #if (OS_EVENT_EN > 0) && (OS_EVENT_NAME_SIZE > 1)
  452. INT8U         OSEventNameGet(OS_EVENT *pevent, char *pname, INT8U *err) KCREENTRANT;
  453. void          OSEventNameSet(OS_EVENT *pevent, char *pname, INT8U *err) KCREENTRANT;
  454. #endif
  455. /*
  456. *********************************************************************************************************
  457. *                                         EVENT FLAGS MANAGEMENT
  458. *********************************************************************************************************
  459. */
  460. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  461. #if OS_FLAG_ACCEPT_EN > 0
  462. OS_FLAGS      OSFlagAccept(OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT8U *err) KCREENTRANT;
  463. #endif
  464. OS_FLAG_GRP  *OSFlagCreate(OS_FLAGS flags, INT8U *err) KCREENTRANT;
  465. #if OS_FLAG_DEL_EN > 0
  466. OS_FLAG_GRP  *OSFlagDel(OS_FLAG_GRP *pgrp, INT8U opt, INT8U *err) KCREENTRANT;
  467. #endif
  468. #if (OS_FLAG_EN > 0) && (OS_FLAG_NAME_SIZE > 1)
  469. INT8U         OSFlagNameGet(OS_FLAG_GRP *pgrp, char *pname, INT8U *err) KCREENTRANT;
  470. void          OSFlagNameSet(OS_FLAG_GRP *pgrp, char *pname, INT8U *err) KCREENTRANT;
  471. #endif
  472. OS_FLAGS      OSFlagPend(OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U wait_type, INT16U timeout, INT8U *err) KCREENTRANT;
  473. OS_FLAGS      OSFlagPendGetFlagsRdy(void) KCREENTRANT;
  474. OS_FLAGS      OSFlagPost(OS_FLAG_GRP *pgrp, OS_FLAGS flags, INT8U operation, INT8U *err) KCREENTRANT;
  475. #if OS_FLAG_QUERY_EN > 0
  476. OS_FLAGS      OSFlagQuery(OS_FLAG_GRP *pgrp, INT8U *err) KCREENTRANT;
  477. #endif
  478. #endif
  479. /*
  480. *********************************************************************************************************
  481. *                                        MESSAGE MAILBOX MANAGEMENT
  482. *********************************************************************************************************
  483. */
  484. #if OS_MBOX_EN > 0
  485. #if OS_MBOX_ACCEPT_EN > 0
  486. void         *OSMboxAccept(OS_EVENT *pevent) KCREENTRANT;
  487. #endif
  488. OS_EVENT     *OSMboxCreate(void *msg) KCREENTRANT;
  489. #if OS_MBOX_DEL_EN > 0
  490. OS_EVENT     *OSMboxDel(OS_EVENT *pevent, INT8U opt, INT8U *err) KCREENTRANT;
  491. #endif
  492. void         *OSMboxPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) KCREENTRANT;
  493. #if OS_MBOX_POST_EN > 0
  494. INT8U         OSMboxPost(OS_EVENT *pevent, void *msg) KCREENTRANT;
  495. #endif
  496. #if OS_MBOX_POST_OPT_EN > 0
  497. INT8U         OSMboxPostOpt(OS_EVENT *pevent, void *msg, INT8U opt) KCREENTRANT;
  498. #endif
  499. #if OS_MBOX_QUERY_EN > 0
  500. INT8U         OSMboxQuery(OS_EVENT *pevent, OS_MBOX_DATA *p_mbox_data) KCREENTRANT;
  501. #endif
  502. #endif
  503. /*
  504. *********************************************************************************************************
  505. *                                           MEMORY MANAGEMENT
  506. *********************************************************************************************************
  507. */
  508. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  509. OS_MEM       *OSMemCreate(void *addr, INT32U nblks, INT32U blksize, INT8U *err) KCREENTRANT;
  510. void         *OSMemGet(OS_MEM *pmem, INT8U *err) KCREENTRANT;
  511. #if OS_MEM_NAME_SIZE > 1
  512. INT8U         OSMemNameGet(OS_MEM *pmem, char *pname, INT8U *err) KCREENTRANT;
  513. void          OSMemNameSet(OS_MEM *pmem, char *pname, INT8U *err) KCREENTRANT;
  514. #endif
  515. INT8U         OSMemPut(OS_MEM *pmem, void *pblk) KCREENTRANT;
  516. #if OS_MEM_QUERY_EN > 0
  517. INT8U         OSMemQuery(OS_MEM *pmem, OS_MEM_DATA *p_mem_data) KCREENTRANT;
  518. #endif
  519. #endif
  520. /*
  521. *********************************************************************************************************
  522. *                                MUTUAL EXCLUSION SEMAPHORE MANAGEMENT
  523. *********************************************************************************************************
  524. */
  525. #if OS_MUTEX_EN > 0
  526. #if OS_MUTEX_ACCEPT_EN > 0
  527. INT8U         OSMutexAccept(OS_EVENT *pevent, INT8U *err) KCREENTRANT;
  528. #endif
  529. OS_EVENT     *OSMutexCreate(INT8U prio, INT8U *err) KCREENTRANT;
  530. #if OS_MUTEX_DEL_EN > 0
  531. OS_EVENT     *OSMutexDel(OS_EVENT *pevent, INT8U opt, INT8U *err) KCREENTRANT; 
  532. #endif
  533. void          OSMutexPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) KCREENTRANT;
  534. INT8U         OSMutexPost(OS_EVENT *pevent) KCREENTRANT;
  535. #if OS_MUTEX_QUERY_EN > 0
  536. INT8U         OSMutexQuery(OS_EVENT *pevent, OS_MUTEX_DATA *p_mutex_data) KCREENTRANT;
  537. #endif
  538. #endif
  539. /*$PAGE*/
  540. /*
  541. *********************************************************************************************************
  542. *                                         MESSAGE QUEUE MANAGEMENT
  543. *********************************************************************************************************
  544. */
  545. #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
  546. #if OS_Q_ACCEPT_EN > 0
  547. void         *OSQAccept(OS_EVENT *pevent, INT8U *err) KCREENTRANT;
  548. #endif
  549. OS_EVENT     *OSQCreate(void **start, INT16U size) KCREENTRANT;
  550. #if OS_Q_DEL_EN > 0
  551. OS_EVENT     *OSQDel(OS_EVENT *pevent, INT8U opt, INT8U *err) KCREENTRANT;
  552. #endif
  553. #if OS_Q_FLUSH_EN > 0
  554. INT8U         OSQFlush(OS_EVENT *pevent) KCREENTRANT;
  555. #endif
  556. void         *OSQPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) KCREENTRANT;
  557. #if OS_Q_POST_EN > 0
  558. INT8U         OSQPost(OS_EVENT *pevent, void *msg) KCREENTRANT;
  559. #endif
  560. #if OS_Q_POST_FRONT_EN > 0
  561. INT8U         OSQPostFront(OS_EVENT *pevent, void *msg) KCREENTRANT;
  562. #endif
  563. #if OS_Q_POST_OPT_EN > 0
  564. INT8U         OSQPostOpt(OS_EVENT *pevent, void *msg, INT8U opt) KCREENTRANT;
  565. #endif
  566. #if OS_Q_QUERY_EN > 0
  567. INT8U         OSQQuery(OS_EVENT *pevent, OS_Q_DATA *p_q_data) KCREENTRANT;
  568. #endif
  569. #endif
  570. /*$PAGE*/
  571. /*
  572. *********************************************************************************************************
  573. *                                          SEMAPHORE MANAGEMENT
  574. *********************************************************************************************************
  575. */
  576. #if OS_SEM_EN > 0
  577. #if OS_SEM_ACCEPT_EN > 0
  578. INT16U        OSSemAccept(OS_EVENT *pevent) KCREENTRANT;
  579. #endif
  580. OS_EVENT     *OSSemCreate(INT16U cnt) KCREENTRANT;
  581. #if OS_SEM_DEL_EN > 0
  582. OS_EVENT     *OSSemDel(OS_EVENT *pevent, INT8U opt, INT8U *err) KCREENTRANT;
  583. #endif
  584. void          OSSemPend(OS_EVENT *pevent, INT16U timeout, INT8U *err) KCREENTRANT;
  585. INT8U         OSSemPost(OS_EVENT *pevent) KCREENTRANT;
  586. #if OS_SEM_QUERY_EN > 0
  587. INT8U         OSSemQuery(OS_EVENT *pevent, OS_SEM_DATA *p_sem_data) KCREENTRANT;
  588. #endif
  589. #endif
  590. /*$PAGE*/
  591. /*
  592. *********************************************************************************************************
  593. *                                            TASK MANAGEMENT
  594. *********************************************************************************************************
  595. */
  596. #if OS_TASK_CHANGE_PRIO_EN > 0
  597. INT8U         OSTaskChangePrio(INT8U oldprio, INT8U newprio) KCREENTRANT;
  598. #endif
  599. #if OS_TASK_CREATE_EN > 0
  600. INT8U         OSTaskCreate(void (*task)(void *pd) KCREENTRANT, void *p_arg, OS_STK *ptos, INT8U prio) KCREENTRANT;
  601. #endif
  602. #if OS_TASK_CREATE_EXT_EN > 0
  603. INT8U         OSTaskCreateExt(void  (*task)(void *pd) KCREENTRANT,
  604.                               void   *p_arg,
  605.                               OS_STK *ptos,
  606.                               INT8U   prio,
  607.                               INT16U  id,
  608.                               OS_STK *pbos,
  609.                               INT32U  stk_size,
  610.                               void   *pext,
  611.                               INT16U  opt) KCREENTRANT;
  612. #endif
  613. #if OS_TASK_DEL_EN > 0
  614. INT8U         OSTaskDel(INT8U prio) KCREENTRANT;
  615. INT8U         OSTaskDelReq(INT8U prio) KCREENTRANT;
  616. #endif
  617. #if OS_TASK_NAME_SIZE > 1
  618. INT8U         OSTaskNameGet(INT8U prio, char *pname, INT8U *err) KCREENTRANT;
  619. void          OSTaskNameSet(INT8U prio, char *pname, INT8U *err) KCREENTRANT;
  620. #endif
  621. #if OS_TASK_SUSPEND_EN > 0
  622. INT8U         OSTaskResume(INT8U prio) KCREENTRANT; 
  623. INT8U         OSTaskSuspend(INT8U prio) KCREENTRANT;
  624. #endif
  625. #if OS_TASK_CREATE_EXT_EN > 0
  626. INT8U         OSTaskStkChk(INT8U prio, OS_STK_DATA *p_stk_data) KCREENTRANT;
  627. #endif
  628. #if OS_TASK_QUERY_EN > 0
  629. INT8U         OSTaskQuery(INT8U prio, OS_TCB *p_task_data) KCREENTRANT;
  630. #endif
  631. /*$PAGE*/
  632. /*
  633. *********************************************************************************************************
  634. *                                            TIME MANAGEMENT
  635. *********************************************************************************************************
  636. */
  637. void          OSTimeDly(INT16U ticks) KCREENTRANT;
  638. #if OS_TIME_DLY_HMSM_EN > 0
  639. INT8U         OSTimeDlyHMSM(INT8U hours, INT8U minutes, INT8U seconds, INT16U milli) KCREENTRANT;
  640. #endif
  641. #if OS_TIME_DLY_RESUME_EN > 0
  642. INT8U         OSTimeDlyResume(INT8U prio) KCREENTRANT;
  643. #endif
  644. #if OS_TIME_GET_SET_EN > 0
  645. INT32U        OSTimeGet(void) KCREENTRANT;
  646. void          OSTimeSet(INT32U ticks) KCREENTRANT;
  647. #endif
  648. void          OSTimeTick(void) KCREENTRANT;
  649. /*
  650. *********************************************************************************************************
  651. *                                             MISCELLANEOUS
  652. *********************************************************************************************************
  653. */
  654. void          OSInit(void) KCREENTRANT;
  655. void          OSIntEnter(void) KCREENTRANT;
  656. void          OSIntExit(void) KCREENTRANT;
  657. #if OS_SCHED_LOCK_EN > 0
  658. void          OSSchedLock(void) KCREENTRANT;
  659. void          OSSchedUnlock(void) KCREENTRANT;
  660. #endif
  661. void          OSStart(void) KCREENTRANT;
  662. void          OSStatInit(void) KCREENTRANT;
  663. INT16U        OSVersion(void) KCREENTRANT;
  664. /*$PAGE*/
  665. /*
  666. *********************************************************************************************************
  667. *                                      INTERNAL FUNCTION PROTOTYPES
  668. *                            (Your application MUST NOT call these functions)
  669. *********************************************************************************************************
  670. */
  671. #if OS_TASK_DEL_EN > 0
  672. void          OS_Dummy(void) KCREENTRANT;
  673. #endif
  674. #if OS_EVENT_EN > 0
  675. INT8U         OS_EventTaskRdy(OS_EVENT *pevent, void *msg, INT8U msk) KCREENTRANT;
  676. void          OS_EventTaskWait(OS_EVENT *pevent) KCREENTRANT;
  677. void          OS_EventTO(OS_EVENT *pevent) KCREENTRANT;
  678. void          OS_EventWaitListInit(OS_EVENT *pevent) KCREENTRANT;
  679. #endif
  680. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  681. void          OS_FlagInit(void) KCREENTRANT;
  682. void          OS_FlagUnlink(OS_FLAG_NODE *pnode) KCREENTRANT;
  683. #endif
  684. void          OS_MemClr(INT8U *pdest, INT16U size) KCREENTRANT;
  685. void          OS_MemCopy(INT8U *pdest, INT8U *psrc, INT16U size) KCREENTRANT;
  686. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  687. void          OS_MemInit(void) KCREENTRANT;
  688. #endif
  689. #if OS_Q_EN > 0
  690. void          OS_QInit(void) KCREENTRANT;
  691. #endif
  692. void          OS_Sched(void) KCREENTRANT;
  693. #if (OS_EVENT_NAME_SIZE > 1) || (OS_FLAG_NAME_SIZE > 1) || (OS_MEM_NAME_SIZE > 1) || (OS_TASK_NAME_SIZE > 1)
  694. INT8U         OS_StrCopy(char *pdest, char *psrc) KCREENTRANT;
  695. INT8U         OS_StrLen(char *psrc) KCREENTRANT;
  696. #endif
  697. void          OS_TaskIdle(void *p_arg) KCREENTRANT;
  698. #if OS_TASK_STAT_EN > 0
  699. void          OS_TaskStat(void *p_arg) KCREENTRANT;
  700. #endif
  701. #if OS_TASK_CREATE_EXT_EN > 0
  702. void          OS_TaskStkClr(OS_STK *ptos, INT32U size, INT16U opt) KCREENTRANT;
  703. #endif
  704. #if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
  705. void          OS_TaskStatStkChk(void) KCREENTRANT;
  706. #endif
  707. INT8U         OS_TCBInit(INT8U prio, OS_STK *ptos, OS_STK *pbos, INT16U id, INT32U stk_size, void *pext, INT16U opt) KCREENTRANT;
  708. /*$PAGE*/
  709. /*
  710. *********************************************************************************************************
  711. *                                          FUNCTION PROTOTYPES
  712. *                                      (Target Specific Functions)
  713. *********************************************************************************************************
  714. */
  715. #if OS_VERSION >= 270 && OS_DEBUG_EN > 0
  716. void          OSDebugInit(void) KCREENTRANT;
  717. #endif
  718. #if OS_VERSION >= 204
  719. void          OSInitHookBegin(void) KCREENTRANT;
  720. void          OSInitHookEnd(void) KCREENTRANT;
  721. #endif
  722. void          OSIntCtxSw(void) KCREENTRANT;
  723. void          OSStartHighRdy(void) KCREENTRANT;
  724. void          OSTaskCreateHook(OS_TCB *ptcb) KCREENTRANT;
  725. void          OSTaskDelHook(OS_TCB *ptcb) KCREENTRANT;
  726. #if OS_VERSION >= 251
  727. void          OSTaskIdleHook(void) KCREENTRANT;
  728. #endif
  729. void          OSTaskStatHook(void) KCREENTRANT;
  730. OS_STK       *OSTaskStkInit(void (*task)(void *pd) KCREENTRANT, void *p_arg, OS_STK *ptos, INT16U opt) KCREENTRANT;
  731. #if OS_TASK_SW_HOOK_EN > 0
  732. void          OSTaskSwHook(void) KCREENTRANT;
  733. #endif
  734. #if OS_VERSION >= 204
  735. void          OSTCBInitHook(OS_TCB *ptcb) KCREENTRANT;
  736. #endif
  737. #if OS_TIME_TICK_HOOK_EN > 0
  738. void          OSTimeTickHook(void) KCREENTRANT;
  739. #endif
  740. /*
  741. *********************************************************************************************************
  742. *                                          FUNCTION PROTOTYPES
  743. *                                  (Compiler Specific ISR prototypes)
  744. *********************************************************************************************************
  745. */
  746. #ifndef OS_ISR_PROTO_EXT
  747. void          OSCtxSw(void) KCREENTRANT;
  748. void          OSTickISR(void) KCREENTRANT;
  749. #endif
  750. /*$PAGE*/
  751. /*
  752. *********************************************************************************************************
  753. *                                   LOOK FOR MISSING #define CONSTANTS
  754. *
  755. * This section is used to generate ERROR messages at compile time if certain #define constants are 
  756. * MISSING in OS_CFG.H.  This allows you to quickly determine the source of the error.
  757. *
  758. * You SHOULD NOT change this section UNLESS you would like to add more comments as to the source of the
  759. * compile time error.
  760. *********************************************************************************************************
  761. */
  762. /*
  763. *********************************************************************************************************
  764. *                                            EVENT FLAGS
  765. *********************************************************************************************************
  766. */
  767. #ifndef OS_FLAG_EN
  768. #error  "OS_CFG.H, Missing OS_FLAG_EN: Enable (1) or Disable (0) code generation for Event Flags"
  769. #else
  770.     #ifndef OS_MAX_FLAGS
  771.     #error  "OS_CFG.H, Missing OS_MAX_FLAGS: Max. number of Event Flag Groups in your application"
  772.     #else
  773.         #if     OS_MAX_FLAGS > 255
  774.         #error  "OS_CFG.H, OS_MAX_FLAGS must be <= 255"
  775.         #endif
  776.     #endif
  777.     #ifndef OS_FLAG_WAIT_CLR_EN
  778.     #error  "OS_CFG.H, Missing OS_FLAG_WAIT_CLR_EN: Include code for Wait on Clear EVENT FLAGS"
  779.     #endif
  780.     #ifndef OS_FLAG_ACCEPT_EN
  781.     #error  "OS_CFG.H, Missing OS_FLAG_ACCEPT_EN: Include code for OSFlagAccept()"
  782.     #endif
  783.     #ifndef OS_FLAG_DEL_EN
  784.     #error  "OS_CFG.H, Missing OS_FLAG_DEL_EN: Include code for OSFlagDel()"
  785.     #endif
  786.     #ifndef OS_FLAG_NAME_SIZE
  787.     #error  "OS_CFG.H, Missing OS_FLAG_NAME_SIZE: Determines the size of flag group names"
  788.     #endif
  789.     #ifndef OS_FLAG_QUERY_EN
  790.     #error  "OS_CFG.H, Missing OS_FLAG_QUERY_EN: Include code for OSFlagQuery()"
  791.     #endif
  792. #endif
  793. /*
  794. *********************************************************************************************************
  795. *                                           MESSAGE MAILBOXES
  796. *********************************************************************************************************
  797. */
  798. #ifndef OS_MBOX_EN
  799. #error  "OS_CFG.H, Missing OS_MBOX_EN: Enable (1) or Disable (0) code generation for MAILBOXES"
  800. #else
  801.     #ifndef OS_MBOX_ACCEPT_EN
  802.     #error  "OS_CFG.H, Missing OS_MBOX_ACCEPT_EN: Include code for OSMboxAccept()"
  803.     #endif
  804.     #ifndef OS_MBOX_DEL_EN
  805.     #error  "OS_CFG.H, Missing OS_MBOX_DEL_EN: Include code for OSMboxDel()"
  806.     #endif
  807.     #ifndef OS_MBOX_POST_EN
  808.     #error  "OS_CFG.H, Missing OS_MBOX_POST_EN: Include code for OSMboxPost()"
  809.     #endif
  810.     #ifndef OS_MBOX_POST_OPT_EN
  811.     #error  "OS_CFG.H, Missing OS_MBOX_POST_OPT_EN: Include code for OSMboxPostOpt()"
  812.     #endif
  813.     #ifndef OS_MBOX_QUERY_EN
  814.     #error  "OS_CFG.H, Missing OS_MBOX_QUERY_EN: Include code for OSMboxQuery()"
  815.     #endif
  816. #endif
  817. /*
  818. *********************************************************************************************************
  819. *                                           MEMORY MANAGEMENT
  820. *********************************************************************************************************
  821. */
  822. #ifndef OS_MEM_EN
  823. #error  "OS_CFG.H, Missing OS_MEM_EN: Enable (1) or Disable (0) code generation for MEMORY MANAGER"
  824. #else
  825.     #ifndef OS_MAX_MEM_PART
  826.     #error  "OS_CFG.H, Missing OS_MAX_MEM_PART: Max. number of memory partitions"
  827.     #else
  828.         #if     OS_MAX_MEM_PART > 255
  829.         #error  "OS_CFG.H, OS_MAX_MEM_PART must be <= 255"
  830.         #endif
  831.     #endif
  832.     #ifndef OS_MEM_NAME_SIZE
  833.     #error  "OS_CFG.H, Missing OS_MEM_NAME_SIZE: Determines the size of memory partition names"
  834.     #endif
  835.     #ifndef OS_MEM_QUERY_EN
  836.     #error  "OS_CFG.H, Missing OS_MEM_QUERY_EN: Include code for OSMemQuery()"
  837.     #endif
  838. #endif
  839. /*
  840. *********************************************************************************************************
  841. *                                       MUTUAL EXCLUSION SEMAPHORES
  842. *********************************************************************************************************
  843. */
  844. #ifndef OS_MUTEX_EN
  845. #error  "OS_CFG.H, Missing OS_MUTEX_EN: Enable (1) or Disable (0) code generation for MUTEX"
  846. #else
  847.     #ifndef OS_MUTEX_ACCEPT_EN
  848.     #error  "OS_CFG.H, Missing OS_MUTEX_ACCEPT_EN: Include code for OSMutexAccept()"
  849.     #endif
  850.     #ifndef OS_MUTEX_DEL_EN
  851.     #error  "OS_CFG.H, Missing OS_MUTEX_DEL_EN: Include code for OSMutexDel()"
  852.     #endif
  853.     #ifndef OS_MUTEX_QUERY_EN
  854.     #error  "OS_CFG.H, Missing OS_MUTEX_QUERY_EN: Include code for OSMutexQuery()"
  855.     #endif
  856. #endif
  857. /*
  858. *********************************************************************************************************
  859. *                                              MESSAGE QUEUES
  860. *********************************************************************************************************
  861. */
  862. #ifndef OS_Q_EN
  863. #error  "OS_CFG.H, Missing OS_Q_EN: Enable (1) or Disable (0) code generation for QUEUES"
  864. #else
  865.     #ifndef OS_MAX_QS
  866.     #error  "OS_CFG.H, Missing OS_MAX_QS: Max. number of queue control blocks"
  867.     #else
  868.         #if     OS_MAX_QS > 255
  869.         #error  "OS_CFG.H, OS_MAX_QS must be <= 255"
  870.         #endif
  871.     #endif
  872.     #ifndef OS_Q_ACCEPT_EN
  873.     #error  "OS_CFG.H, Missing OS_Q_ACCEPT_EN: Include code for OSQAccept()"
  874.     #endif
  875.     #ifndef OS_Q_DEL_EN
  876.     #error  "OS_CFG.H, Missing OS_Q_DEL_EN: Include code for OSQDel()"
  877.     #endif
  878.     #ifndef OS_Q_FLUSH_EN
  879.     #error  "OS_CFG.H, Missing OS_Q_FLUSH_EN: Include code for OSQFlush()"
  880.     #endif
  881.     #ifndef OS_Q_POST_EN
  882.     #error  "OS_CFG.H, Missing OS_Q_POST_EN: Include code for OSQPost()"
  883.     #endif
  884.     #ifndef OS_Q_POST_FRONT_EN
  885.     #error  "OS_CFG.H, Missing OS_Q_POST_FRONT_EN: Include code for OSQPostFront()"
  886.     #endif
  887.     #ifndef OS_Q_POST_OPT_EN
  888.     #error  "OS_CFG.H, Missing OS_Q_POST_OPT_EN: Include code for OSQPostOpt()"
  889.     #endif
  890.     #ifndef OS_Q_QUERY_EN
  891.     #error  "OS_CFG.H, Missing OS_Q_QUERY_EN: Include code for OSQQuery()"
  892.     #endif
  893. #endif
  894. /*
  895. *********************************************************************************************************
  896. *                                              SEMAPHORES
  897. *********************************************************************************************************
  898. */
  899. #ifndef OS_SEM_EN
  900. #error  "OS_CFG.H, Missing OS_SEM_EN: Enable (1) or Disable (0) code generation for SEMAPHORES"
  901. #else
  902.     #ifndef OS_SEM_ACCEPT_EN
  903.     #error  "OS_CFG.H, Missing OS_SEM_ACCEPT_EN: Include code for OSSemAccept()"
  904.     #endif
  905.     #ifndef OS_SEM_DEL_EN
  906.     #error  "OS_CFG.H, Missing OS_SEM_DEL_EN: Include code for OSSemDel()"
  907.     #endif
  908.     #ifndef OS_SEM_QUERY_EN
  909.     #error  "OS_CFG.H, Missing OS_SEM_QUERY_EN: Include code for OSSemQuery()"
  910.     #endif
  911. #endif
  912. /*
  913. *********************************************************************************************************
  914. *                                             TASK MANAGEMENT
  915. *********************************************************************************************************
  916. */
  917. #ifndef OS_MAX_TASKS
  918. #error  "OS_CFG.H, Missing OS_MAX_TASKS: Max. number of tasks in your application"
  919. #else
  920.     #if     OS_MAX_TASKS < 2
  921.     #error  "OS_CFG.H,         OS_MAX_TASKS must be >= 2"
  922.     #endif
  923.     #if     OS_MAX_TASKS > 63
  924.     #error  "OS_CFG.H,         OS_MAX_TASKS must be <= 63"
  925.     #endif
  926. #endif
  927. #ifndef OS_TASK_IDLE_STK_SIZE
  928. #error  "OS_CFG.H, Missing OS_TASK_IDLE_STK_SIZE: Idle task stack size"
  929. #endif
  930. #ifndef OS_TASK_STAT_EN
  931. #error  "OS_CFG.H, Missing OS_TASK_STAT_EN: Enable (1) or Disable(0) the statistics task"
  932. #endif
  933. #ifndef OS_TASK_STAT_STK_SIZE
  934. #error  "OS_CFG.H, Missing OS_TASK_STAT_STK_SIZE: Statistics task stack size"
  935. #endif
  936. #ifndef OS_TASK_STAT_STK_CHK_EN
  937. #error  "OS_CFG.H, Missing OS_TASK_STAT_STK_CHK_EN: Check task stacks from statistics task"
  938. #endif
  939. #ifndef OS_TASK_CHANGE_PRIO_EN
  940. #error  "OS_CFG.H, Missing OS_TASK_CHANGE_PRIO_EN: Include code for OSTaskChangePrio()"
  941. #endif
  942. #ifndef OS_TASK_CREATE_EN
  943. #error  "OS_CFG.H, Missing OS_TASK_CREATE_EN: Include code for OSTaskCreate()"
  944. #endif
  945. #ifndef OS_TASK_CREATE_EXT_EN
  946. #error  "OS_CFG.H, Missing OS_TASK_CREATE_EXT_EN: Include code for OSTaskCreateExt()"
  947. #endif
  948. #ifndef OS_TASK_DEL_EN
  949. #error  "OS_CFG.H, Missing OS_TASK_DEL_EN: Include code for OSTaskDel()"
  950. #endif
  951. #ifndef OS_TASK_NAME_SIZE
  952. #error  "OS_CFG.H, Missing OS_TASK_NAME_SIZE: Determine the size of task names"
  953. #endif
  954. #ifndef OS_TASK_SUSPEND_EN
  955. #error  "OS_CFG.H, Missing OS_TASK_SUSPEND_EN: Include code for OSTaskSuspend() and OSTaskResume()"
  956. #endif
  957. #ifndef OS_TASK_QUERY_EN
  958. #error  "OS_CFG.H, Missing OS_TASK_QUERY_EN: Include code for OSTaskQuery()"
  959. #endif
  960. /*
  961. *********************************************************************************************************
  962. *                                             TIME MANAGEMENT
  963. *********************************************************************************************************
  964. */
  965. #ifndef OS_TICKS_PER_SEC
  966. #error  "OS_CFG.H, Missing OS_TICKS_PER_SEC: Sets the number of ticks in one second"
  967. #endif
  968. #ifndef OS_TIME_DLY_HMSM_EN
  969. #error  "OS_CFG.H, Missing OS_TIME_DLY_HMSM_EN: Include code for OSTimeDlyHMSM()"
  970. #endif
  971. #ifndef OS_TIME_DLY_RESUME_EN
  972. #error  "OS_CFG.H, Missing OS_TIME_DLY_RESUME_EN: Include code for OSTimeDlyResume()"
  973. #endif
  974. #ifndef OS_TIME_GET_SET_EN
  975. #error  "OS_CFG.H, Missing OS_TIME_GET_SET_EN: Include code for OSTimeGet() and OSTimeSet()"
  976. #endif
  977. /*
  978. *********************************************************************************************************
  979. *                                            MISCELLANEOUS
  980. *********************************************************************************************************
  981. */
  982. #ifndef OS_ARG_CHK_EN
  983. #error  "OS_CFG.H, Missing OS_ARG_CHK_EN: Enable (1) or Disable (0) argument checking"
  984. #endif
  985. #ifndef OS_CPU_HOOKS_EN
  986. #error  "OS_CFG.H, Missing OS_CPU_HOOKS_EN: uC/OS-II hooks are found in the processor port files when 1"
  987. #endif
  988. #ifndef OS_LOWEST_PRIO
  989. #error  "OS_CFG.H, Missing OS_LOWEST_PRIO: Defines the lowest priority that can be assigned"
  990. #endif
  991. #ifndef OS_MAX_EVENTS
  992. #error  "OS_CFG.H, Missing OS_MAX_EVENTS: Max. number of event control blocks in your application"
  993. #else
  994.     #if     OS_MAX_EVENTS > 255
  995.     #error  "OS_CFG.H, OS_MAX_EVENTS must be <= 255"
  996.     #endif
  997. #endif
  998. #ifndef OS_SCHED_LOCK_EN
  999. #error  "OS_CFG.H, Missing OS_SCHED_LOCK_EN: Include code for OSSchedLock() and OSSchedUnlock()"
  1000. #endif
  1001. #ifndef OS_TASK_PROFILE_EN
  1002. #error  "OS_CFG.H, Missing OS_TASK_PROFILE_EN: Include data structure for run-time task profiling"
  1003. #endif
  1004. #ifndef OS_TASK_SW_HOOK_EN
  1005. #error  "OS_CFG.H, Missing OS_TASK_SW_HOOK_EN: Allows you to include the code for OSTaskSwHook() or not"
  1006. #endif
  1007. #ifndef OS_TICK_STEP_EN
  1008. #error  "OS_CFG.H, Missing OS_TICK_STEP_EN: Allows to 'step' one tick at a time with uC/OS-View"
  1009. #endif
  1010. #ifndef OS_TIME_TICK_HOOK_EN
  1011. #error  "OS_CFG.H, Missing OS_TIME_TICK_HOOK_EN: Allows you to include the code for OSTimeTickHook() or not"
  1012. #endif
  1013. #ifndef OS_DEBUG_EN
  1014. #error  "OS_CFG.H, Missing OS_DEBUG_EN: Allows you to include variables for debugging or not"
  1015. #endif
  1016. #ifdef __cplusplus
  1017. }
  1018. #endif
  1019. #endif