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

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