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

uCOS

开发平台:

Visual C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/OS-II
  4. *                                          The Real-Time Kernel
  5. *
  6. *                          (c) Copyright 1992-2006, Jean J. Labrosse, Weston, FL
  7. *                                           All Rights Reserved
  8. *
  9. * File    : uCOS_II.H
  10. * By      : Jean J. Labrosse
  11. * Version : V2.83
  12. *********************************************************************************************************
  13. */
  14. #ifndef   OS_uCOS_II_H
  15. #define   OS_uCOS_II_H
  16. #ifdef __cplusplus
  17. extern "C" {
  18. #endif
  19. /*
  20. *********************************************************************************************************
  21. *                                          uC/OS-II VERSION NUMBER
  22. *********************************************************************************************************
  23. */
  24. #define  OS_VERSION                 283u                /* Version of uC/OS-II (Vx.yy mult. by 100)    */
  25. /*
  26. *********************************************************************************************************
  27. *                                           INCLUDE HEADER FILES
  28. *********************************************************************************************************
  29. */
  30. #include <SystemConfig.h>
  31. #include <os_cfg_r.h>
  32. #include <os_cpu.h>
  33. /*
  34. *********************************************************************************************************
  35. *                                             MISCELLANEOUS
  36. *********************************************************************************************************
  37. */
  38. #ifdef   OS_GLOBALS
  39. #define  OS_EXT
  40. #else
  41. #define  OS_EXT  extern
  42. #endif
  43. #ifndef  OS_FALSE
  44. #define  OS_FALSE                     0u
  45. #endif
  46. #ifndef  OS_TRUE
  47. #define  OS_TRUE                         1u
  48. #endif
  49. #define  OS_ASCII_NUL          (INT8U)0
  50. #define  OS_PRIO_SELF              0xFFu                /* Indicate SELF priority                      */
  51. #if OS_TASK_STAT_EN > 0
  52. #define  OS_N_SYS_TASKS               2u                /* Number of system tasks                      */
  53. #else
  54. #define  OS_N_SYS_TASKS               1u
  55. #endif
  56. #define  OS_TASK_STAT_PRIO  (OS_LOWEST_PRIO - 1)        /* Statistic task priority                     */
  57. #define  OS_TASK_IDLE_PRIO  (OS_LOWEST_PRIO)            /* IDLE      task priority                     */
  58. #if OS_LOWEST_PRIO <= 63
  59. #define  OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8 + 1)   /* Size of event table                         */
  60. #define  OS_RDY_TBL_SIZE   ((OS_LOWEST_PRIO) / 8 + 1)   /* Size of ready table                         */
  61. #else
  62. #define  OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 16 + 1)  /* Size of event table                         */
  63. #define  OS_RDY_TBL_SIZE   ((OS_LOWEST_PRIO) / 16 + 1)  /* Size of ready table                         */
  64. #endif
  65. #define  OS_TASK_IDLE_ID          65535u                /* ID numbers for Idle, Stat and Timer tasks   */
  66. #define  OS_TASK_STAT_ID          65534u
  67. #define  OS_TASK_TMR_ID           65533u
  68. #define  OS_EVENT_EN       (((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0) || (OS_SEM_EN > 0) || (OS_MUTEX_EN > 0))
  69. /*$PAGE*/
  70. /*
  71. *********************************************************************************************************
  72. *                              TASK STATUS (Bit definition for OSTCBStat)
  73. *********************************************************************************************************
  74. */
  75. #define  OS_STAT_RDY               0x00u    /* Ready to run                                            */
  76. #define  OS_STAT_SEM               0x01u    /* Pending on semaphore                                    */
  77. #define  OS_STAT_MBOX              0x02u    /* Pending on mailbox                                      */
  78. #define  OS_STAT_Q                 0x04u    /* Pending on queue                                        */
  79. #define  OS_STAT_SUSPEND           0x08u    /* Task is suspended                                       */
  80. #define  OS_STAT_MUTEX             0x10u    /* Pending on mutual exclusion semaphore                   */
  81. #define  OS_STAT_FLAG              0x20u    /* Pending on event flag group                             */
  82. #define  OS_STAT_PEND_ANY         (OS_STAT_SEM | OS_STAT_MBOX | OS_STAT_Q | OS_STAT_MUTEX | OS_STAT_FLAG)
  83. /*
  84. *********************************************************************************************************
  85. *                                        OS_EVENT types
  86. *********************************************************************************************************
  87. */
  88. #define  OS_EVENT_TYPE_UNUSED         0u
  89. #define  OS_EVENT_TYPE_MBOX           1u
  90. #define  OS_EVENT_TYPE_Q              2u
  91. #define  OS_EVENT_TYPE_SEM            3u
  92. #define  OS_EVENT_TYPE_MUTEX          4u
  93. #define  OS_EVENT_TYPE_FLAG           5u
  94. #define  OS_TMR_TYPE                100u    /* Used to identify Timers ...                             */
  95.                                             /* ... (Must be different value than OS_EVENT_TYPE_???)    */
  96. /*
  97. *********************************************************************************************************
  98. *                                         EVENT FLAGS
  99. *********************************************************************************************************
  100. */
  101. #define  OS_FLAG_WAIT_CLR_ALL         0u    /* Wait for ALL    the bits specified to be CLR (i.e. 0)   */
  102. #define  OS_FLAG_WAIT_CLR_AND         0u
  103. #define  OS_FLAG_WAIT_CLR_ANY         1u    /* Wait for ANY of the bits specified to be CLR (i.e. 0)   */
  104. #define  OS_FLAG_WAIT_CLR_OR          1u
  105. #define  OS_FLAG_WAIT_SET_ALL         2u    /* Wait for ALL    the bits specified to be SET (i.e. 1)   */
  106. #define  OS_FLAG_WAIT_SET_AND         2u
  107. #define  OS_FLAG_WAIT_SET_ANY         3u    /* Wait for ANY of the bits specified to be SET (i.e. 1)   */
  108. #define  OS_FLAG_WAIT_SET_OR          3u
  109. #define  OS_FLAG_CONSUME           0x80u    /* Consume the flags if condition(s) satisfied             */
  110. #define  OS_FLAG_CLR                  0u
  111. #define  OS_FLAG_SET                  1u
  112. /*
  113. *********************************************************************************************************
  114. *                                   Values for OSTickStepState
  115. *
  116. * Note(s): This feature is used by uC/OS-View.
  117. *********************************************************************************************************
  118. */
  119. #if OS_TICK_STEP_EN > 0
  120. #define  OS_TICK_STEP_DIS             0u    /* Stepping is disabled, tick runs as mormal               */
  121. #define  OS_TICK_STEP_WAIT            1u    /* Waiting for uC/OS-View to set OSTickStepState to _ONCE  */
  122. #define  OS_TICK_STEP_ONCE            2u    /* Process tick once and wait for next cmd from uC/OS-View */
  123. #endif
  124. /*
  125. *********************************************************************************************************
  126. *       Possible values for 'opt' argument of OSSemDel(), OSMboxDel(), OSQDel() and OSMutexDel()
  127. *********************************************************************************************************
  128. */
  129. #define  OS_DEL_NO_PEND               0u
  130. #define  OS_DEL_ALWAYS                1u
  131. /*
  132. *********************************************************************************************************
  133. *                                     OS???PostOpt() OPTIONS
  134. *
  135. * These #defines are used to establish the options for OSMboxPostOpt() and OSQPostOpt().
  136. *********************************************************************************************************
  137. */
  138. #define  OS_POST_OPT_NONE          0x00u    /* NO option selected                                      */
  139. #define  OS_POST_OPT_BROADCAST     0x01u    /* Broadcast message to ALL tasks waiting                  */
  140. #define  OS_POST_OPT_FRONT         0x02u    /* Post to highest priority task waiting                   */
  141. #define  OS_POST_OPT_NO_SCHED      0x04u    /* Do not call the scheduler if this option is selected    */
  142. /*
  143. *********************************************************************************************************
  144. *                                 TASK OPTIONS (see OSTaskCreateExt())
  145. *********************************************************************************************************
  146. */
  147. #define  OS_TASK_OPT_NONE        0x0000u    /* NO option selected                                      */
  148. #define  OS_TASK_OPT_STK_CHK     0x0001u    /* Enable stack checking for the task                      */
  149. #define  OS_TASK_OPT_STK_CLR     0x0002u    /* Clear the stack when the task is create                 */
  150. #define  OS_TASK_OPT_SAVE_FP     0x0004u    /* Save the contents of any floating-point registers       */
  151. /*
  152. *********************************************************************************************************
  153. *                            TIMER OPTIONS (see OSTmrStart() and OSTmrStop())
  154. *********************************************************************************************************
  155. */
  156. #define  OS_TMR_OPT_NONE              0u    /* No option selected                                      */
  157. #define  OS_TMR_OPT_ONE_SHOT          1u    /* Timer will not automatically restart when it expires    */
  158. #define  OS_TMR_OPT_PERIODIC          2u    /* Timer will     automatically restart when it expires    */
  159. #define  OS_TMR_OPT_CALLBACK          3u    /* OSTmrStop() option to call 'callback' w/ timer arg.     */
  160. #define  OS_TMR_OPT_CALLBACK_ARG      4u    /* OSTmrStop() option to call 'callback' w/ new   arg.     */
  161. /*
  162. *********************************************************************************************************
  163. *                                            TIMER STATES
  164. *********************************************************************************************************
  165. */
  166. #define  OS_TMR_STATE_UNUSED          0u
  167. #define  OS_TMR_STATE_STOPPED         1u
  168. #define  OS_TMR_STATE_COMPLETED       2u
  169. #define  OS_TMR_STATE_RUNNING         3u
  170. /*
  171. *********************************************************************************************************
  172. *                                             ERROR CODES
  173. *********************************************************************************************************
  174. */
  175. #define OS_NO_ERR                     0u
  176. #define OS_ERR_EVENT_TYPE             1u
  177. #define OS_ERR_PEND_ISR               2u
  178. #define OS_ERR_POST_NULL_PTR          3u
  179. #define OS_ERR_PEVENT_NULL            4u
  180. #define OS_ERR_POST_ISR               5u
  181. #define OS_ERR_QUERY_ISR              6u
  182. #define OS_ERR_INVALID_OPT            7u
  183. #define OS_ERR_TASK_WAITING           8u
  184. #define OS_ERR_PDATA_NULL             9u
  185. #define OS_TIMEOUT                   10u
  186. #define OS_TASK_NOT_EXIST            11u
  187. #define OS_ERR_EVENT_NAME_TOO_LONG   12u
  188. #define OS_ERR_FLAG_NAME_TOO_LONG    13u
  189. #define OS_ERR_TASK_NAME_TOO_LONG    14u
  190. #define OS_ERR_PNAME_NULL            15u
  191. #define OS_ERR_TASK_CREATE_ISR       16u
  192. #define OS_ERR_PEND_LOCKED           17u
  193. #define OS_MBOX_FULL                 20u
  194. #define OS_Q_FULL                    30u
  195. #define OS_Q_EMPTY                   31u
  196. #define OS_PRIO_EXIST                40u
  197. #define OS_PRIO_ERR                  41u
  198. #define OS_PRIO_INVALID              42u
  199. #define OS_SEM_OVF                   50u
  200. #define OS_TASK_DEL_ERR              60u
  201. #define OS_TASK_DEL_IDLE             61u
  202. #define OS_TASK_DEL_REQ              62u
  203. #define OS_TASK_DEL_ISR              63u
  204. #define OS_NO_MORE_TCB               70u
  205. #define OS_TIME_NOT_DLY              80u
  206. #define OS_TIME_INVALID_MINUTES      81u
  207. #define OS_TIME_INVALID_SECONDS      82u
  208. #define OS_TIME_INVALID_MILLI        83u
  209. #define OS_TIME_ZERO_DLY             84u
  210. #define OS_TASK_SUSPEND_PRIO         90u
  211. #define OS_TASK_SUSPEND_IDLE         91u
  212. #define OS_TASK_RESUME_PRIO         100u
  213. #define OS_TASK_NOT_SUSPENDED       101u
  214. #define OS_MEM_INVALID_PART         110u
  215. #define OS_MEM_INVALID_BLKS         111u
  216. #define OS_MEM_INVALID_SIZE         112u
  217. #define OS_MEM_NO_FREE_BLKS         113u
  218. #define OS_MEM_FULL                 114u
  219. #define OS_MEM_INVALID_PBLK         115u
  220. #define OS_MEM_INVALID_PMEM         116u
  221. #define OS_MEM_INVALID_PDATA        117u
  222. #define OS_MEM_INVALID_ADDR         118u
  223. #define OS_MEM_NAME_TOO_LONG        119u
  224. #define OS_ERR_NOT_MUTEX_OWNER      120u
  225. #define OS_TASK_OPT_ERR             130u
  226. #define OS_ERR_DEL_ISR              140u
  227. #define OS_ERR_CREATE_ISR           141u
  228. #define OS_FLAG_INVALID_PGRP        150u
  229. #define OS_FLAG_ERR_WAIT_TYPE       151u
  230. #define OS_FLAG_ERR_NOT_RDY         152u
  231. #define OS_FLAG_INVALID_OPT         153u
  232. #define OS_FLAG_GRP_DEPLETED        154u
  233. #define OS_ERR_PIP_LOWER            160u
  234. #define OS_ERR_TMR_INVALID_DLY      170u
  235. #define OS_ERR_TMR_INVALID_PERIOD   171u
  236. #define OS_ERR_TMR_INVALID_OPT      172u
  237. #define OS_ERR_TMR_INVALID_NAME     173u
  238. #define OS_ERR_TMR_NON_AVAIL        174u
  239. #define OS_ERR_TMR_INACTIVE         175u
  240. #define OS_ERR_TMR_INVALID_DEST     176u
  241. #define OS_ERR_TMR_INVALID_TYPE     177u
  242. #define OS_ERR_TMR_INVALID          178u
  243. #define OS_ERR_TMR_ISR              179u
  244. #define OS_ERR_TMR_NAME_TOO_LONG    180u
  245. #define OS_ERR_TMR_INVALID_STATE    181u
  246. #define OS_ERR_TMR_STOPPED          182u
  247. #define OS_ERR_TMR_NO_CALLBACK      183u
  248. /*$PAGE*/
  249. /*
  250. *********************************************************************************************************
  251. *                                          EVENT CONTROL BLOCK
  252. *********************************************************************************************************
  253. */
  254. #if OS_EVENT_EN && (OS_MAX_EVENTS > 0)
  255. typedef struct os_event {
  256.     INT8U    OSEventType;                    /* Type of event control block (see OS_EVENT_TYPE_xxxx)    */
  257.     void    *OSEventPtr;                     /* Pointer to message or queue structure                   */
  258.     INT16U   OSEventCnt;                     /* Semaphore Count (not used if other EVENT type)          */
  259. #if OS_LOWEST_PRIO <= 63
  260.     INT8U    OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  261.     INT8U    OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  262. #else
  263.     INT16U   OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  264.     INT16U   OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  265. #endif
  266. #if OS_EVENT_NAME_SIZE > 1
  267.     INT8U    OSEventName[OS_EVENT_NAME_SIZE];
  268. #endif
  269. } OS_EVENT;
  270. #endif
  271. /*
  272. *********************************************************************************************************
  273. *                                       EVENT FLAGS CONTROL BLOCK
  274. *********************************************************************************************************
  275. */
  276. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  277. #if OS_FLAGS_NBITS == 8                     /* Determine the size of OS_FLAGS (8, 16 or 32 bits)       */
  278. typedef  INT8U    OS_FLAGS;
  279. #endif
  280. #if OS_FLAGS_NBITS == 16
  281. typedef  INT16U   OS_FLAGS;
  282. #endif
  283. #if OS_FLAGS_NBITS == 32
  284. typedef  INT32U   OS_FLAGS;
  285. #endif
  286. typedef struct os_flag_grp {                /* Event Flag Group                                        */
  287.     INT8U         OSFlagType;               /* Should be set to OS_EVENT_TYPE_FLAG                     */
  288.     void         *OSFlagWaitList;           /* Pointer to first NODE of task waiting on event flag     */
  289.     OS_FLAGS      OSFlagFlags;              /* 8, 16 or 32 bit flags                                   */
  290. #if OS_FLAG_NAME_SIZE > 1
  291.     INT8U         OSFlagName[OS_FLAG_NAME_SIZE];
  292. #endif
  293. } OS_FLAG_GRP;
  294. typedef struct os_flag_node {               /* Event Flag Wait List Node                               */
  295.     void         *OSFlagNodeNext;           /* Pointer to next     NODE in wait list                   */
  296.     void         *OSFlagNodePrev;           /* Pointer to previous NODE in wait list                   */
  297.     void         *OSFlagNodeTCB;            /* Pointer to TCB of waiting task                          */
  298.     void         *OSFlagNodeFlagGrp;        /* Pointer to Event Flag Group                             */
  299.     OS_FLAGS      OSFlagNodeFlags;          /* Event flag to wait on                                   */
  300.     INT8U         OSFlagNodeWaitType;       /* Type of wait:                                           */
  301.                                             /*      OS_FLAG_WAIT_AND                                   */
  302.                                             /*      OS_FLAG_WAIT_ALL                                   */
  303.                                             /*      OS_FLAG_WAIT_OR                                    */
  304.                                             /*      OS_FLAG_WAIT_ANY                                   */
  305. } OS_FLAG_NODE;
  306. #endif
  307. /*$PAGE*/
  308. /*
  309. *********************************************************************************************************
  310. *                                          MESSAGE MAILBOX DATA
  311. *********************************************************************************************************
  312. */
  313. #if OS_MBOX_EN > 0
  314. typedef struct os_mbox_data {
  315.     void   *OSMsg;                         /* Pointer to message in mailbox                            */
  316. #if OS_LOWEST_PRIO <= 63
  317.     INT8U   OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur                 */
  318.     INT8U   OSEventGrp;                    /* Group corresponding to tasks waiting for event to occur  */
  319. #else
  320.     INT16U  OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur                 */
  321.     INT16U  OSEventGrp;                    /* Group corresponding to tasks waiting for event to occur  */
  322. #endif
  323. } OS_MBOX_DATA;
  324. #endif
  325. /*
  326. *********************************************************************************************************
  327. *                                     MEMORY PARTITION DATA STRUCTURES
  328. *********************************************************************************************************
  329. */
  330. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  331. typedef struct os_mem {                   /* MEMORY CONTROL BLOCK                                      */
  332.     void   *OSMemAddr;                    /* Pointer to beginning of memory partition                  */
  333.     void   *OSMemFreeList;                /* Pointer to list of free memory blocks                     */
  334.     INT32U  OSMemBlkSize;                 /* Size (in bytes) of each block of memory                   */
  335.     INT32U  OSMemNBlks;                   /* Total number of blocks in this partition                  */
  336.     INT32U  OSMemNFree;                   /* Number of memory blocks remaining in this partition       */
  337. #if OS_MEM_NAME_SIZE > 1
  338.     INT8U   OSMemName[OS_MEM_NAME_SIZE];  /* Memory partition name                                     */
  339. #endif
  340. } OS_MEM;
  341. typedef struct os_mem_data {
  342.     void   *OSAddr;                    /* Pointer to the beginning address of the memory partition     */
  343.     void   *OSFreeList;                /* Pointer to the beginning of the free list of memory blocks   */
  344.     INT32U  OSBlkSize;                 /* Size (in bytes) of each memory block                         */
  345.     INT32U  OSNBlks;                   /* Total number of blocks in the partition                      */
  346.     INT32U  OSNFree;                   /* Number of memory blocks free                                 */
  347.     INT32U  OSNUsed;                   /* Number of memory blocks used                                 */
  348. } OS_MEM_DATA;
  349. #endif
  350. /*$PAGE*/
  351. /*
  352. *********************************************************************************************************
  353. *                                    MUTUAL EXCLUSION SEMAPHORE DATA
  354. *********************************************************************************************************
  355. */
  356. #if OS_MUTEX_EN > 0
  357. typedef struct os_mutex_data {
  358. #if OS_LOWEST_PRIO <= 63
  359.     INT8U   OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  360.     INT8U   OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  361. #else
  362.     INT16U  OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  363.     INT16U  OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  364. #endif
  365.     INT8U   OSValue;                        /* Mutex value (0 = used, 1 = available)                   */
  366.     INT8U   OSOwnerPrio;                    /* Mutex owner's task priority or 0xFF if no owner         */
  367.     INT8U   OSMutexPIP;                     /* Priority Inheritance Priority or 0xFF if no owner       */
  368. } OS_MUTEX_DATA;
  369. #endif
  370. /*
  371. *********************************************************************************************************
  372. *                                          MESSAGE QUEUE DATA
  373. *********************************************************************************************************
  374. */
  375. #if OS_Q_EN > 0
  376. typedef struct os_q {                   /* QUEUE CONTROL BLOCK                                         */
  377.     struct os_q   *OSQPtr;              /* Link to next queue control block in list of free blocks     */
  378.     void         **OSQStart;            /* Pointer to start of queue data                              */
  379.     void         **OSQEnd;              /* Pointer to end   of queue data                              */
  380.     void         **OSQIn;               /* Pointer to where next message will be inserted  in   the Q  */
  381.     void         **OSQOut;              /* Pointer to where next message will be extracted from the Q  */
  382.     INT16U         OSQSize;             /* Size of queue (maximum number of entries)                   */
  383.     INT16U         OSQEntries;          /* Current number of entries in the queue                      */
  384. } OS_Q;
  385. typedef struct os_q_data {
  386.     void          *OSMsg;               /* Pointer to next message to be extracted from queue          */
  387.     INT16U         OSNMsgs;             /* Number of messages in message queue                         */
  388.     INT16U         OSQSize;             /* Size of message queue                                       */
  389. #if OS_LOWEST_PRIO <= 63
  390.     INT8U          OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur         */
  391.     INT8U          OSEventGrp;          /* Group corresponding to tasks waiting for event to occur     */
  392. #else
  393.     INT16U         OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur         */
  394.     INT16U         OSEventGrp;          /* Group corresponding to tasks waiting for event to occur     */
  395. #endif
  396. } OS_Q_DATA;
  397. #endif
  398. /*
  399. *********************************************************************************************************
  400. *                                           SEMAPHORE DATA
  401. *********************************************************************************************************
  402. */
  403. #if OS_SEM_EN > 0
  404. typedef struct os_sem_data {
  405.     INT16U  OSCnt;                          /* Semaphore count                                         */
  406. #if OS_LOWEST_PRIO <= 63
  407.     INT8U   OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  408.     INT8U   OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  409. #else
  410.     INT16U  OSEventTbl[OS_EVENT_TBL_SIZE];  /* List of tasks waiting for event to occur                */
  411.     INT16U  OSEventGrp;                     /* Group corresponding to tasks waiting for event to occur */
  412. #endif
  413. } OS_SEM_DATA;
  414. #endif
  415. /*
  416. *********************************************************************************************************
  417. *                                            TASK STACK DATA
  418. *********************************************************************************************************
  419. */
  420. #if OS_TASK_CREATE_EXT_EN > 0
  421. typedef struct os_stk_data {
  422.     INT32U  OSFree;                    /* Number of free bytes on the stack                            */
  423.     INT32U  OSUsed;                    /* Number of bytes used on the stack                            */
  424. } OS_STK_DATA;
  425. #endif
  426. /*$PAGE*/
  427. /*
  428. *********************************************************************************************************
  429. *                                          TASK CONTROL BLOCK
  430. *********************************************************************************************************
  431. */
  432. typedef struct os_tcb {
  433.     OS_STK          *OSTCBStkPtr;      /* Pointer to current top of stack                              */
  434. #if OS_TASK_CREATE_EXT_EN > 0
  435.     void            *OSTCBExtPtr;      /* Pointer to user definable data for TCB extension             */
  436.     OS_STK          *OSTCBStkBottom;   /* Pointer to bottom of stack                                   */
  437.     INT32U           OSTCBStkSize;     /* Size of task stack (in number of stack elements)             */
  438.     INT16U           OSTCBOpt;         /* Task options as passed by OSTaskCreateExt()                  */
  439.     INT16U           OSTCBId;          /* Task ID (0..65535)                                           */
  440. #endif
  441.     struct os_tcb   *OSTCBNext;        /* Pointer to next     TCB in the TCB list                      */
  442.     struct os_tcb   *OSTCBPrev;        /* Pointer to previous TCB in the TCB list                      */
  443. #if OS_EVENT_EN
  444.     OS_EVENT        *OSTCBEventPtr;    /* Pointer to event control block                               */
  445. #endif
  446. #if ((OS_Q_EN > 0) && (OS_MAX_QS > 0)) || (OS_MBOX_EN > 0)
  447.     void            *OSTCBMsg;         /* Message received from OSMboxPost() or OSQPost()              */
  448. #endif
  449. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  450. #if OS_TASK_DEL_EN > 0
  451.     OS_FLAG_NODE    *OSTCBFlagNode;    /* Pointer to event flag node                                   */
  452. #endif
  453.     OS_FLAGS         OSTCBFlagsRdy;    /* Event flags that made task ready to run                      */
  454. #endif
  455.     INT16U           OSTCBDly;         /* Nbr ticks to delay task or, timeout waiting for event        */
  456.     INT8U            OSTCBStat;        /* Task status                                                  */
  457.     BOOLEAN          OSTCBPendTO;      /* Flag indicating PEND timed out (OS_TRUE == timed out)           */
  458.     INT8U            OSTCBPrio;        /* Task priority (0 == highest)                                 */
  459.     INT8U            OSTCBX;           /* Bit position in group  corresponding to task priority        */
  460.     INT8U            OSTCBY;           /* Index into ready table corresponding to task priority        */
  461. #if OS_LOWEST_PRIO <= 63
  462.     INT8U            OSTCBBitX;        /* Bit mask to access bit position in ready table               */
  463.     INT8U            OSTCBBitY;        /* Bit mask to access bit position in ready group               */
  464. #else
  465.     INT16U           OSTCBBitX;        /* Bit mask to access bit position in ready table               */
  466.     INT16U           OSTCBBitY;        /* Bit mask to access bit position in ready group               */
  467. #endif
  468. #if OS_TASK_DEL_EN > 0
  469.     INT8U            OSTCBDelReq;      /* Indicates whether a task needs to delete itself              */
  470. #endif
  471. #if OS_TASK_PROFILE_EN > 0
  472.     INT32U           OSTCBCtxSwCtr;    /* Number of time the task was switched in                      */
  473.     INT32U           OSTCBCyclesTot;   /* Total number of clock cycles the task has been running       */
  474.     INT32U           OSTCBCyclesStart; /* Snapshot of cycle counter at start of task resumption        */
  475.     OS_STK          *OSTCBStkBase;     /* Pointer to the beginning of the task stack                   */
  476.     INT32U           OSTCBStkUsed;     /* Number of bytes used from the stack                          */
  477. #endif
  478. #if OS_TASK_NAME_SIZE > 1
  479.     INT8U            OSTCBTaskName[OS_TASK_NAME_SIZE];
  480. #endif
  481. } OS_TCB;
  482. /*$PAGE*/
  483. /*
  484. ************************************************************************************************************************
  485. *                                                   TIMER DATA TYPES
  486. ************************************************************************************************************************
  487. */
  488. #if OS_TMR_EN > 0
  489. typedef  void (*OS_TMR_CALLBACK)(void *ptmr, void *parg);
  490. typedef  struct  os_tmr {
  491.     INT8U            OSTmrType;                       /* Should be set to OS_TMR_TYPE                                  */
  492.     OS_TMR_CALLBACK  OSTmrCallback;                   /* Function to call when timer expires                           */
  493.     void            *OSTmrCallbackArg;                /* Argument to pass to function when timer expires               */
  494.     void            *OSTmrNext;                       /* Double link list pointers                                     */
  495.     void            *OSTmrPrev;
  496.     INT32U           OSTmrMatch;                      /* Timer expires when OSTmrTime == OSTmrMatch                    */
  497.     INT32U           OSTmrDly;                        /* Delay time before periodic update starts                      */
  498.     INT32U           OSTmrPeriod;                     /* Period to repeat timer                                        */
  499. #if OS_TMR_CFG_NAME_SIZE > 0
  500.     INT8U            OSTmrName[OS_TMR_CFG_NAME_SIZE]; /* Name to give the timer                                        */
  501. #endif
  502.     INT8U            OSTmrOpt;                        /* Options (see OS_TMR_OPT_???)                                  */
  503.     INT8U            OSTmrState;                      /* Indicates the state of the timer:                             */
  504.                                                       /*     OS_TMR_STATE_UNUSED                                       */
  505.                                                       /*     OS_TMR_STATE_RUNNING                                      */
  506.                                                       /*     OS_TMR_STATE_STOPPED                                      */
  507. } OS_TMR;
  508. typedef  struct  os_tmr_wheel {
  509.     OS_TMR          *OSTmrFirst;                      /* Pointer to first timer in linked list                         */
  510.     INT16U           OSTmrEntries;
  511. } OS_TMR_WHEEL;
  512. #endif
  513. /*$PAGE*/
  514. /*
  515. *********************************************************************************************************
  516. *                                            GLOBAL VARIABLES
  517. *********************************************************************************************************
  518. */
  519. OS_EXT  INT32U            OSCtxSwCtr;               /* Counter of number of context switches           */
  520. #if OS_EVENT_EN && (OS_MAX_EVENTS > 0)
  521. OS_EXT  OS_EVENT         *OSEventFreeList;          /* Pointer to list of free EVENT control blocks    */
  522. OS_EXT  OS_EVENT          OSEventTbl[OS_MAX_EVENTS];/* Table of EVENT control blocks                   */
  523. #endif
  524. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  525. OS_EXT  OS_FLAG_GRP       OSFlagTbl[OS_MAX_FLAGS];  /* Table containing event flag groups              */
  526. OS_EXT  OS_FLAG_GRP      *OSFlagFreeList;           /* Pointer to free list of event flag groups       */
  527. #endif
  528. #if OS_TASK_STAT_EN > 0
  529. OS_EXT  INT8S             OSCPUUsage;               /* Percentage of CPU used                          */
  530. OS_EXT  INT32U            OSIdleCtrMax;             /* Max. value that idle ctr can take in 1 sec.     */
  531. OS_EXT  INT32U            OSIdleCtrRun;             /* Val. reached by idle ctr at run time in 1 sec.  */
  532. OS_EXT  BOOLEAN           OSStatRdy;                /* Flag indicating that the statistic task is rdy  */
  533. OS_EXT  OS_STK            OSTaskStatStk[OS_TASK_STAT_STK_SIZE];      /* Statistics task stack          */
  534. #endif
  535. OS_EXT  INT8U             OSIntNesting;             /* Interrupt nesting level                         */
  536. OS_EXT  INT8U             OSLockNesting;            /* Multitasking lock nesting level                 */
  537. OS_EXT  INT8U             OSPrioCur;                /* Priority of current task                        */
  538. OS_EXT  INT8U             OSPrioHighRdy;            /* Priority of highest priority task               */
  539. #if OS_LOWEST_PRIO <= 63
  540. OS_EXT  INT8U             OSRdyGrp;                        /* Ready list group                         */
  541. OS_EXT  INT8U             OSRdyTbl[OS_RDY_TBL_SIZE];       /* Table of tasks which are ready to run    */
  542. #else
  543. OS_EXT  INT16U            OSRdyGrp;                        /* Ready list group                         */
  544. OS_EXT  INT16U            OSRdyTbl[OS_RDY_TBL_SIZE];       /* Table of tasks which are ready to run    */
  545. #endif
  546. OS_EXT  BOOLEAN           OSRunning;                       /* Flag indicating that kernel is running   */
  547. OS_EXT  INT8U             OSTaskCtr;                       /* Number of tasks created                  */
  548. OS_EXT  volatile  INT32U  OSIdleCtr;                                 /* Idle counter                   */
  549. OS_EXT  OS_STK            OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE];      /* Idle task stack                */
  550. OS_EXT  OS_TCB           *OSTCBCur;                        /* Pointer to currently running TCB         */
  551. OS_EXT  OS_TCB           *OSTCBFreeList;                   /* Pointer to list of free TCBs             */
  552. OS_EXT  OS_TCB           *OSTCBHighRdy;                    /* Pointer to highest priority TCB R-to-R   */
  553. OS_EXT  OS_TCB           *OSTCBList;                       /* Pointer to doubly linked list of TCBs    */
  554. OS_EXT  OS_TCB           *OSTCBPrioTbl[OS_LOWEST_PRIO + 1];/* Table of pointers to created TCBs        */
  555. OS_EXT  OS_TCB            OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS];   /* Table of TCBs                  */
  556. #if OS_TICK_STEP_EN > 0
  557. OS_EXT  INT8U             OSTickStepState;          /* Indicates the state of the tick step feature    */
  558. #endif
  559. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  560. OS_EXT  OS_MEM           *OSMemFreeList;            /* Pointer to free list of memory partitions       */
  561. OS_EXT  OS_MEM            OSMemTbl[OS_MAX_MEM_PART];/* Storage for memory partition manager            */
  562. #endif
  563. #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
  564. OS_EXT  OS_Q             *OSQFreeList;              /* Pointer to list of free QUEUE control blocks    */
  565. OS_EXT  OS_Q              OSQTbl[OS_MAX_QS];        /* Table of QUEUE control blocks                   */
  566. #endif
  567. #if OS_TIME_GET_SET_EN > 0
  568. OS_EXT  volatile  INT32U  OSTime;                   /* Current value of system time (in ticks)         */
  569. #endif
  570. #if OS_TMR_EN > 0
  571. OS_EXT  INT16U            OSTmrFree;                /* Number of free entries in the timer pool        */
  572. OS_EXT  INT16U            OSTmrUsed;                /* Number of timers used                           */
  573. OS_EXT  INT32U            OSTmrTime;                /* Current timer time                              */
  574. OS_EXT  OS_EVENT         *OSTmrSem;                 /* Sem. used to gain exclusive access to timers    */
  575. OS_EXT  OS_EVENT         *OSTmrSemSignal;           /* Sem. used to signal the update of timers        */
  576. OS_EXT  OS_TMR            OSTmrTbl[OS_TMR_CFG_MAX]; /* Table containing pool of timers                 */
  577. OS_EXT  OS_TMR           *OSTmrFreeList;            /* Pointer to free list of timers                  */
  578. OS_EXT  OS_STK            OSTmrTaskStk[OS_TASK_TMR_STK_SIZE];
  579. OS_EXT  OS_TMR_WHEEL      OSTmrWheelTbl[OS_TMR_CFG_WHEEL_SIZE];
  580. #endif
  581. extern  INT8U   const     OSUnMapTbl[256];          /* Priority->Index    lookup table                 */
  582. /*$PAGE*/
  583. /*
  584. *********************************************************************************************************
  585. *                                          FUNCTION PROTOTYPES
  586. *                                     (Target Independent Functions)
  587. *********************************************************************************************************
  588. */
  589. /*
  590. *********************************************************************************************************
  591. *                                            MISCELLANEOUS
  592. *********************************************************************************************************
  593. */
  594. #if OS_EVENT_EN && (OS_EVENT_NAME_SIZE > 1)
  595. INT8U         OSEventNameGet        (OS_EVENT        *pevent, 
  596.                                      INT8U           *pname, 
  597.                                      INT8U           *err);
  598. void          OSEventNameSet        (OS_EVENT        *pevent, 
  599.                                      INT8U           *pname, 
  600.                                      INT8U           *err);
  601. #endif
  602. /*
  603. *********************************************************************************************************
  604. *                                         EVENT FLAGS MANAGEMENT
  605. *********************************************************************************************************
  606. */
  607. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  608. #if OS_FLAG_ACCEPT_EN > 0
  609. OS_FLAGS      OSFlagAccept          (OS_FLAG_GRP     *pgrp, 
  610.                                      OS_FLAGS         flags, 
  611.                                      INT8U            wait_type, 
  612.                                      INT8U           *err);
  613. #endif
  614. OS_FLAG_GRP  *OSFlagCreate          (OS_FLAGS         flags, 
  615.                                     INT8U            *err);
  616. #if OS_FLAG_DEL_EN > 0
  617. OS_FLAG_GRP  *OSFlagDel             (OS_FLAG_GRP     *pgrp, 
  618.                                      INT8U            opt, 
  619.                                      INT8U           *err);
  620. #endif
  621. #if (OS_FLAG_EN > 0) && (OS_FLAG_NAME_SIZE > 1)
  622. INT8U         OSFlagNameGet         (OS_FLAG_GRP     *pgrp, 
  623.                                      INT8U           *pname, 
  624.                                      INT8U           *err);
  625. void          OSFlagNameSet         (OS_FLAG_GRP     *pgrp, 
  626.                                      INT8U           *pname, 
  627.                                      INT8U           *err);
  628. #endif
  629. OS_FLAGS      OSFlagPend            (OS_FLAG_GRP     *pgrp, 
  630.                                      OS_FLAGS         flags, 
  631.                                      INT8U            wait_type, 
  632.                                      INT16U           timeout, 
  633.                                      INT8U           *err);
  634. OS_FLAGS      OSFlagPendGetFlagsRdy (void);
  635. OS_FLAGS      OSFlagPost            (OS_FLAG_GRP     *pgrp, 
  636.                                      OS_FLAGS         flags, 
  637.                                      INT8U            opt, 
  638.                                      INT8U           *err);
  639. #if OS_FLAG_QUERY_EN > 0
  640. OS_FLAGS      OSFlagQuery           (OS_FLAG_GRP     *pgrp, 
  641.                                      INT8U           *err);
  642. #endif
  643. #endif
  644. /*
  645. *********************************************************************************************************
  646. *                                        MESSAGE MAILBOX MANAGEMENT
  647. *********************************************************************************************************
  648. */
  649. #if OS_MBOX_EN > 0
  650. #if OS_MBOX_ACCEPT_EN > 0
  651. void         *OSMboxAccept          (OS_EVENT        *pevent);
  652. #endif
  653. OS_EVENT     *OSMboxCreate          (void            *msg);
  654. #if OS_MBOX_DEL_EN > 0
  655. OS_EVENT     *OSMboxDel             (OS_EVENT        *pevent, 
  656.                                      INT8U            opt, 
  657.                                      INT8U           *err);
  658. #endif
  659. void         *OSMboxPend            (OS_EVENT        *pevent, 
  660.                                      INT16U           timeout, 
  661.                                      INT8U           *err);
  662. #if OS_MBOX_POST_EN > 0
  663. INT8U         OSMboxPost            (OS_EVENT        *pevent, 
  664.                                      void            *msg);
  665. #endif
  666. #if OS_MBOX_POST_OPT_EN > 0
  667. INT8U         OSMboxPostOpt         (OS_EVENT        *pevent, 
  668.                                      void            *msg, 
  669.                                      INT8U            opt);
  670. #endif
  671. #if OS_MBOX_QUERY_EN > 0
  672. INT8U         OSMboxQuery           (OS_EVENT        *pevent, 
  673.                                      OS_MBOX_DATA    *p_mbox_data);
  674. #endif
  675. #endif
  676. /*
  677. *********************************************************************************************************
  678. *                                           MEMORY MANAGEMENT
  679. *********************************************************************************************************
  680. */
  681. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  682. OS_MEM       *OSMemCreate           (void            *addr, 
  683.                                      INT32U           nblks, 
  684.                                      INT32U           blksize, 
  685.                                      INT8U           *err);
  686. void         *OSMemGet              (OS_MEM          *pmem, 
  687.                                      INT8U           *err);
  688. #if OS_MEM_NAME_SIZE > 1
  689. INT8U         OSMemNameGet          (OS_MEM          *pmem, 
  690.                                      INT8U           *pname, 
  691.                                      INT8U           *err);
  692. void          OSMemNameSet          (OS_MEM          *pmem, 
  693.                                      INT8U           *pname, 
  694.                                      INT8U           *err);
  695. #endif
  696. INT8U         OSMemPut              (OS_MEM          *pmem, 
  697.                                      void            *pblk);
  698. #if OS_MEM_QUERY_EN > 0
  699. INT8U         OSMemQuery            (OS_MEM          *pmem, 
  700.                                      OS_MEM_DATA     *p_mem_data);
  701. #endif
  702. #endif
  703. /*
  704. *********************************************************************************************************
  705. *                                MUTUAL EXCLUSION SEMAPHORE MANAGEMENT
  706. *********************************************************************************************************
  707. */
  708. #if OS_MUTEX_EN > 0
  709. #if OS_MUTEX_ACCEPT_EN > 0
  710. INT8U         OSMutexAccept         (OS_EVENT        *pevent, 
  711.                                      INT8U           *err);
  712. #endif
  713. OS_EVENT     *OSMutexCreate         (INT8U            prio, 
  714.                                      INT8U           *err);
  715. #if OS_MUTEX_DEL_EN > 0
  716. OS_EVENT     *OSMutexDel            (OS_EVENT        *pevent, 
  717.                                      INT8U            opt, 
  718.                                      INT8U           *err);
  719. #endif
  720. void          OSMutexPend           (OS_EVENT        *pevent, 
  721.                                      INT16U           timeout, 
  722.                                      INT8U           *err);
  723. INT8U         OSMutexPost           (OS_EVENT        *pevent);
  724. #if OS_MUTEX_QUERY_EN > 0
  725. INT8U         OSMutexQuery          (OS_EVENT        *pevent, 
  726.                                      OS_MUTEX_DATA   *p_mutex_data);
  727. #endif
  728. #endif
  729. /*$PAGE*/
  730. /*
  731. *********************************************************************************************************
  732. *                                         MESSAGE QUEUE MANAGEMENT
  733. *********************************************************************************************************
  734. */
  735. #if (OS_Q_EN > 0) && (OS_MAX_QS > 0)
  736. #if OS_Q_ACCEPT_EN > 0
  737. void         *OSQAccept             (OS_EVENT        *pevent, 
  738.                                      INT8U           *err);
  739. #endif
  740. OS_EVENT     *OSQCreate             (void           **start, 
  741.                                      INT16U           size);
  742. #if OS_Q_DEL_EN > 0
  743. OS_EVENT     *OSQDel                (OS_EVENT        *pevent, 
  744.                                      INT8U            opt, 
  745.                                      INT8U           *err);
  746. #endif
  747. #if OS_Q_FLUSH_EN > 0
  748. INT8U         OSQFlush              (OS_EVENT        *pevent);
  749. #endif
  750. void         *OSQPend               (OS_EVENT        *pevent, 
  751.                                      INT16U           timeout, 
  752.                                      INT8U           *err);
  753. #if OS_Q_POST_EN > 0
  754. INT8U         OSQPost               (OS_EVENT        *pevent, 
  755.                                      void            *msg);
  756. #endif
  757. #if OS_Q_POST_FRONT_EN > 0
  758. INT8U         OSQPostFront          (OS_EVENT        *pevent, 
  759.                                      void            *msg);
  760. #endif
  761. #if OS_Q_POST_OPT_EN > 0
  762. INT8U         OSQPostOpt            (OS_EVENT        *pevent, 
  763.                                      void            *msg, 
  764.                                      INT8U            opt);
  765. #endif
  766. #if OS_Q_QUERY_EN > 0
  767. INT8U         OSQQuery              (OS_EVENT        *pevent, 
  768.                                      OS_Q_DATA       *p_q_data);
  769. #endif
  770. #endif
  771. /*$PAGE*/
  772. /*
  773. *********************************************************************************************************
  774. *                                          SEMAPHORE MANAGEMENT
  775. *********************************************************************************************************
  776. */
  777. #if OS_SEM_EN > 0
  778. #if OS_SEM_ACCEPT_EN > 0
  779. INT16U        OSSemAccept           (OS_EVENT        *pevent);
  780. #endif
  781. OS_EVENT     *OSSemCreate           (INT16U           cnt);
  782. #if OS_SEM_DEL_EN > 0
  783. OS_EVENT     *OSSemDel              (OS_EVENT        *pevent, 
  784.                                      INT8U            opt, 
  785.                                      INT8U           *err);
  786. #endif
  787. void          OSSemPend             (OS_EVENT        *pevent, 
  788.                                      INT16U           timeout, 
  789.                                      INT8U           *err);
  790. INT8U         OSSemPost             (OS_EVENT        *pevent);
  791. #if OS_SEM_QUERY_EN > 0
  792. INT8U         OSSemQuery            (OS_EVENT        *pevent, 
  793.                                      OS_SEM_DATA     *p_sem_data);
  794. #endif
  795. #if OS_SEM_SET_EN > 0
  796. void          OSSemSet              (OS_EVENT        *pevent, 
  797.                                      INT16U           cnt, 
  798.                                      INT8U           *err);
  799. #endif
  800. #endif
  801. /*$PAGE*/
  802. /*
  803. *********************************************************************************************************
  804. *                                            TASK MANAGEMENT
  805. *********************************************************************************************************
  806. */
  807. #if OS_TASK_CHANGE_PRIO_EN > 0
  808. INT8U         OSTaskChangePrio      (INT8U            oldprio, 
  809.                                      INT8U            newprio);
  810. #endif
  811. #if OS_TASK_CREATE_EN > 0
  812. INT8U         OSTaskCreate          (void           (*task)(void *p_arg), 
  813.                                      void            *p_arg, 
  814.                                      OS_STK          *ptos, 
  815.                                      INT8U            prio);
  816. #endif
  817. #if OS_TASK_CREATE_EXT_EN > 0
  818. INT8U         OSTaskCreateExt       (void           (*task)(void *p_arg),
  819.                                      void            *p_arg,
  820.                                      OS_STK          *ptos,
  821.                                      INT8U            prio,
  822.                                      INT16U           id,
  823.                                      OS_STK          *pbos,
  824.                                      INT32U           stk_size,
  825.                                      void            *pext,
  826.                                      INT16U           opt);
  827. #endif
  828. #if OS_TASK_DEL_EN > 0
  829. INT8U         OSTaskDel             (INT8U            prio);
  830. INT8U         OSTaskDelReq          (INT8U            prio);
  831. #endif
  832. #if OS_TASK_NAME_SIZE > 1
  833. INT8U         OSTaskNameGet         (INT8U            prio, 
  834.                                      INT8U           *pname, 
  835.                                      INT8U           *err);
  836. void          OSTaskNameSet         (INT8U            prio, 
  837.                                      INT8U           *pname, 
  838.                                      INT8U           *err);
  839. #endif
  840. #if OS_TASK_SUSPEND_EN > 0
  841. INT8U         OSTaskResume          (INT8U            prio);
  842. INT8U         OSTaskSuspend         (INT8U            prio);
  843. #endif
  844. #if OS_TASK_CREATE_EXT_EN > 0
  845. INT8U         OSTaskStkChk          (INT8U            prio, 
  846.                                      OS_STK_DATA     *p_stk_data);
  847. #endif
  848. #if OS_TASK_QUERY_EN > 0
  849. INT8U         OSTaskQuery           (INT8U            prio, 
  850.                                      OS_TCB          *p_task_data);
  851. #endif
  852. /*$PAGE*/
  853. /*
  854. *********************************************************************************************************
  855. *                                            TIME MANAGEMENT
  856. *********************************************************************************************************
  857. */
  858. void          OSTimeDly             (INT16U           ticks);
  859. #if OS_TIME_DLY_HMSM_EN > 0
  860. INT8U         OSTimeDlyHMSM         (INT8U            hours, 
  861.                                      INT8U            minutes, 
  862.                                      INT8U            seconds, 
  863.                                      INT16U           milli);
  864. #endif
  865. #if OS_TIME_DLY_RESUME_EN > 0
  866. INT8U         OSTimeDlyResume       (INT8U            prio);
  867. #endif
  868. #if OS_TIME_GET_SET_EN > 0
  869. INT32U        OSTimeGet             (void);
  870. void          OSTimeSet             (INT32U           ticks);
  871. #endif
  872. void          OSTimeTick            (void);
  873. /*
  874. *********************************************************************************************************
  875. *                                            TIMER MANAGEMENT
  876. *********************************************************************************************************
  877. */
  878. #if OS_TMR_EN > 0
  879. OS_TMR      *OSTmrCreate            (INT32U           dly, 
  880.                                      INT32U           period, 
  881.                                      INT8U            opt, 
  882.                                      OS_TMR_CALLBACK  callback, 
  883.                                      void            *callback_arg, 
  884.                                      INT8U           *name, 
  885.                                      INT8U           *perr);
  886. BOOLEAN      OSTmrDel               (OS_TMR          *ptmr,
  887.                                      INT8U           *perr);
  888. #if OS_TMR_CFG_NAME_SIZE > 0
  889. INT8U        OSTmrNameGet           (OS_TMR          *ptmr, 
  890.                                      INT8U           *pdest, 
  891.                                      INT8U           *perr);
  892. #endif
  893. INT32U       OSTmrRemainGet         (OS_TMR          *ptmr, 
  894.                                      INT8U           *perr);
  895. INT8U        OSTmrStateGet          (OS_TMR          *ptmr, 
  896.                                      INT8U           *perr);
  897. BOOLEAN      OSTmrStart             (OS_TMR          *ptmr,
  898.                                      INT8U           *perr);
  899. BOOLEAN      OSTmrStop              (OS_TMR          *ptmr, 
  900.                                      INT8U            opt, 
  901.                                      void            *callback_arg, 
  902.                                      INT8U           *perr);
  903. INT8U        OSTmrSignal            (void);
  904. #endif
  905. /*
  906. *********************************************************************************************************
  907. *                                             MISCELLANEOUS
  908. *********************************************************************************************************
  909. */
  910. void          OSInit                (void);
  911. void          OSIntEnter            (void);
  912. void          OSIntExit             (void);
  913. #if OS_SCHED_LOCK_EN > 0
  914. void          OSSchedLock           (void);
  915. void          OSSchedUnlock         (void);
  916. #endif
  917. void          OSStart               (void);
  918. void          OSStatInit            (void);
  919. INT16U        OSVersion             (void);
  920. /*$PAGE*/
  921. /*
  922. *********************************************************************************************************
  923. *                                      INTERNAL FUNCTION PROTOTYPES
  924. *                            (Your application MUST NOT call these functions)
  925. *********************************************************************************************************
  926. */
  927. #if OS_TASK_DEL_EN > 0
  928. void          OS_Dummy              (void);
  929. #endif
  930. #if OS_EVENT_EN
  931. INT8U         OS_EventTaskRdy       (OS_EVENT        *pevent, 
  932.                                      void            *msg, 
  933.                                      INT8U            msk);
  934. void          OS_EventTaskWait      (OS_EVENT        *pevent);
  935. void          OS_EventTO            (OS_EVENT        *pevent);
  936. void          OS_EventWaitListInit  (OS_EVENT        *pevent);
  937. #endif
  938. #if (OS_VERSION >= 251) && (OS_FLAG_EN > 0) && (OS_MAX_FLAGS > 0)
  939. void          OS_FlagInit           (void);
  940. void          OS_FlagUnlink         (OS_FLAG_NODE    *pnode);
  941. #endif
  942. void          OS_MemClr             (INT8U           *pdest, 
  943.                                      INT16U           size);
  944. void          OS_MemCopy            (INT8U           *pdest, 
  945.                                      INT8U           *psrc, 
  946.                                      INT16U           size);
  947. #if (OS_MEM_EN > 0) && (OS_MAX_MEM_PART > 0)
  948. void          OS_MemInit            (void);
  949. #endif
  950. #if OS_Q_EN > 0
  951. void          OS_QInit              (void);
  952. #endif
  953. void          OS_Sched              (void);
  954. #if (OS_EVENT_NAME_SIZE > 1) || (OS_FLAG_NAME_SIZE > 1) || (OS_MEM_NAME_SIZE > 1) || (OS_TASK_NAME_SIZE > 1)
  955. INT8U         OS_StrCopy            (INT8U           *pdest, 
  956.                                      INT8U           *psrc);
  957. INT8U         OS_StrLen             (INT8U           *psrc);
  958. #endif
  959. void          OS_TaskIdle           (void            *p_arg);
  960. #if OS_TASK_STAT_EN > 0
  961. void          OS_TaskStat           (void            *p_arg);
  962. #endif
  963. #if OS_TASK_CREATE_EXT_EN > 0
  964. void          OS_TaskStkClr         (OS_STK          *pbos, 
  965.                                      INT32U           size, 
  966.                                      INT16U           opt);
  967. #endif
  968. #if (OS_TASK_STAT_STK_CHK_EN > 0) && (OS_TASK_CREATE_EXT_EN > 0)
  969. void          OS_TaskStatStkChk     (void);
  970. #endif
  971. INT8U         OS_TCBInit            (INT8U            prio, 
  972.                                      OS_STK          *ptos, 
  973.                                      OS_STK          *pbos, 
  974.                                      INT16U           id, 
  975.                                      INT32U           stk_size, 
  976.                                      void            *pext, 
  977.                                      INT16U           opt);
  978. #if OS_TMR_EN > 0
  979. void          OSTmr_Init(void);
  980. #endif
  981. /*$PAGE*/
  982. /*
  983. *********************************************************************************************************
  984. *                                          FUNCTION PROTOTYPES
  985. *                                      (Target Specific Functions)
  986. *********************************************************************************************************
  987. */
  988. #if OS_VERSION >= 270 && OS_DEBUG_EN > 0
  989. void          OSDebugInit           (void);
  990. #endif
  991. #if OS_VERSION >= 204
  992. void          OSInitHookBegin       (void);
  993. void          OSInitHookEnd         (void);
  994. #endif
  995. void          OSTaskCreateHook      (OS_TCB          *ptcb);
  996. void          OSTaskDelHook         (OS_TCB          *ptcb);
  997. #if OS_VERSION >= 251
  998. void          OSTaskIdleHook        (void);
  999. #endif
  1000. void          OSTaskStatHook        (void);
  1001. OS_STK       *OSTaskStkInit         (void           (*task)(void *p_arg), 
  1002.                                      void            *p_arg, 
  1003.                                      OS_STK          *ptos, 
  1004.                                      INT16U           opt);
  1005. #if OS_TASK_SW_HOOK_EN > 0
  1006. void          OSTaskSwHook          (void);
  1007. #endif
  1008. #if OS_VERSION >= 204
  1009. void          OSTCBInitHook         (OS_TCB          *ptcb);
  1010. #endif
  1011. #if OS_TIME_TICK_HOOK_EN > 0
  1012. void          OSTimeTickHook        (void);
  1013. #endif
  1014. /*
  1015. *********************************************************************************************************
  1016. *                                          FUNCTION PROTOTYPES
  1017. *
  1018. * IMPORTANT: These prototypes MUST be placed in OS_CPU.H
  1019. *********************************************************************************************************
  1020. */
  1021. #if 0
  1022. void          OSStartHighRdy        (void);
  1023. void          OSIntCtxSw            (void);
  1024. void          OSCtxSw               (void);
  1025. #endif
  1026. /*$PAGE*/
  1027. /*
  1028. *********************************************************************************************************
  1029. *                                   LOOK FOR MISSING #define CONSTANTS
  1030. *
  1031. * This section is used to generate ERROR messages at compile time if certain #define constants are
  1032. * MISSING in OS_CFG.H.  This allows you to quickly determine the source of the error.
  1033. *
  1034. * You SHOULD NOT change this section UNLESS you would like to add more comments as to the source of the
  1035. * compile time error.
  1036. *********************************************************************************************************
  1037. */
  1038. /*
  1039. *********************************************************************************************************
  1040. *                                            EVENT FLAGS
  1041. *********************************************************************************************************
  1042. */
  1043. #ifndef OS_FLAG_EN
  1044. #error  "OS_CFG.H, Missing OS_FLAG_EN: Enable (1) or Disable (0) code generation for Event Flags"
  1045. #else
  1046.     #ifndef OS_MAX_FLAGS
  1047.     #error  "OS_CFG.H, Missing OS_MAX_FLAGS: Max. number of Event Flag Groups in your application"
  1048.     #else
  1049.         #if     OS_MAX_FLAGS > 65500u
  1050.         #error  "OS_CFG.H, OS_MAX_FLAGS must be <= 65500"
  1051.         #endif
  1052.     #endif
  1053.     #if     OS_VERSION >= 280
  1054.     #ifndef OS_FLAGS_NBITS
  1055.     #error  "OS_CFG.H, Missing OS_FLAGS_NBITS: Determine #bits used for event flags, MUST be either 8, 16 or 32"
  1056.     #endif
  1057.     #endif
  1058.     #ifndef OS_FLAG_WAIT_CLR_EN
  1059.     #error  "OS_CFG.H, Missing OS_FLAG_WAIT_CLR_EN: Include code for Wait on Clear EVENT FLAGS"
  1060.     #endif
  1061.     #ifndef OS_FLAG_ACCEPT_EN
  1062.     #error  "OS_CFG.H, Missing OS_FLAG_ACCEPT_EN: Include code for OSFlagAccept()"
  1063.     #endif
  1064.     #ifndef OS_FLAG_DEL_EN
  1065.     #error  "OS_CFG.H, Missing OS_FLAG_DEL_EN: Include code for OSFlagDel()"
  1066.     #endif
  1067.     #ifndef OS_FLAG_NAME_SIZE
  1068.     #error  "OS_CFG.H, Missing OS_FLAG_NAME_SIZE: Determines the size of flag group names"
  1069.     #endif
  1070.     #ifndef OS_FLAG_QUERY_EN
  1071.     #error  "OS_CFG.H, Missing OS_FLAG_QUERY_EN: Include code for OSFlagQuery()"
  1072.     #endif
  1073. #endif
  1074. /*
  1075. *********************************************************************************************************
  1076. *                                           MESSAGE MAILBOXES
  1077. *********************************************************************************************************
  1078. */
  1079. #ifndef OS_MBOX_EN
  1080. #error  "OS_CFG.H, Missing OS_MBOX_EN: Enable (1) or Disable (0) code generation for MAILBOXES"
  1081. #else
  1082.     #ifndef OS_MBOX_ACCEPT_EN
  1083.     #error  "OS_CFG.H, Missing OS_MBOX_ACCEPT_EN: Include code for OSMboxAccept()"
  1084.     #endif
  1085.     #ifndef OS_MBOX_DEL_EN
  1086.     #error  "OS_CFG.H, Missing OS_MBOX_DEL_EN: Include code for OSMboxDel()"
  1087.     #endif
  1088.     #ifndef OS_MBOX_POST_EN
  1089.     #error  "OS_CFG.H, Missing OS_MBOX_POST_EN: Include code for OSMboxPost()"
  1090.     #endif
  1091.     #ifndef OS_MBOX_POST_OPT_EN
  1092.     #error  "OS_CFG.H, Missing OS_MBOX_POST_OPT_EN: Include code for OSMboxPostOpt()"
  1093.     #endif
  1094.     #ifndef OS_MBOX_QUERY_EN
  1095.     #error  "OS_CFG.H, Missing OS_MBOX_QUERY_EN: Include code for OSMboxQuery()"
  1096.     #endif
  1097. #endif
  1098. /*
  1099. *********************************************************************************************************
  1100. *                                           MEMORY MANAGEMENT
  1101. *********************************************************************************************************
  1102. */
  1103. #ifndef OS_MEM_EN
  1104. #error  "OS_CFG.H, Missing OS_MEM_EN: Enable (1) or Disable (0) code generation for MEMORY MANAGER"
  1105. #else
  1106.     #ifndef OS_MAX_MEM_PART
  1107.     #error  "OS_CFG.H, Missing OS_MAX_MEM_PART: Max. number of memory partitions"
  1108.     #else
  1109.         #if     OS_MAX_MEM_PART > 65500u
  1110.         #error  "OS_CFG.H, OS_MAX_MEM_PART must be <= 65500"
  1111.         #endif
  1112.     #endif
  1113.     #ifndef OS_MEM_NAME_SIZE
  1114.     #error  "OS_CFG.H, Missing OS_MEM_NAME_SIZE: Determines the size of memory partition names"
  1115.     #endif
  1116.     #ifndef OS_MEM_QUERY_EN
  1117.     #error  "OS_CFG.H, Missing OS_MEM_QUERY_EN: Include code for OSMemQuery()"
  1118.     #endif
  1119. #endif
  1120. /*
  1121. *********************************************************************************************************
  1122. *                                       MUTUAL EXCLUSION SEMAPHORES
  1123. *********************************************************************************************************
  1124. */
  1125. #ifndef OS_MUTEX_EN
  1126. #error  "OS_CFG.H, Missing OS_MUTEX_EN: Enable (1) or Disable (0) code generation for MUTEX"
  1127. #else
  1128.     #ifndef OS_MUTEX_ACCEPT_EN
  1129.     #error  "OS_CFG.H, Missing OS_MUTEX_ACCEPT_EN: Include code for OSMutexAccept()"
  1130.     #endif
  1131.     #ifndef OS_MUTEX_DEL_EN
  1132.     #error  "OS_CFG.H, Missing OS_MUTEX_DEL_EN: Include code for OSMutexDel()"
  1133.     #endif
  1134.     #ifndef OS_MUTEX_QUERY_EN
  1135.     #error  "OS_CFG.H, Missing OS_MUTEX_QUERY_EN: Include code for OSMutexQuery()"
  1136.     #endif
  1137. #endif
  1138. /*
  1139. *********************************************************************************************************
  1140. *                                              MESSAGE QUEUES
  1141. *********************************************************************************************************
  1142. */
  1143. #ifndef OS_Q_EN
  1144. #error  "OS_CFG.H, Missing OS_Q_EN: Enable (1) or Disable (0) code generation for QUEUES"
  1145. #else
  1146.     #ifndef OS_MAX_QS
  1147.     #error  "OS_CFG.H, Missing OS_MAX_QS: Max. number of queue control blocks"
  1148.     #else
  1149.         #if     OS_MAX_QS > 65500u
  1150.         #error  "OS_CFG.H, OS_MAX_QS must be <= 65500"
  1151.         #endif
  1152.     #endif
  1153.     #ifndef OS_Q_ACCEPT_EN
  1154.     #error  "OS_CFG.H, Missing OS_Q_ACCEPT_EN: Include code for OSQAccept()"
  1155.     #endif
  1156.     #ifndef OS_Q_DEL_EN
  1157.     #error  "OS_CFG.H, Missing OS_Q_DEL_EN: Include code for OSQDel()"
  1158.     #endif
  1159.     #ifndef OS_Q_FLUSH_EN
  1160.     #error  "OS_CFG.H, Missing OS_Q_FLUSH_EN: Include code for OSQFlush()"
  1161.     #endif
  1162.     #ifndef OS_Q_POST_EN
  1163.     #error  "OS_CFG.H, Missing OS_Q_POST_EN: Include code for OSQPost()"
  1164.     #endif
  1165.     #ifndef OS_Q_POST_FRONT_EN
  1166.     #error  "OS_CFG.H, Missing OS_Q_POST_FRONT_EN: Include code for OSQPostFront()"
  1167.     #endif
  1168.     #ifndef OS_Q_POST_OPT_EN
  1169.     #error  "OS_CFG.H, Missing OS_Q_POST_OPT_EN: Include code for OSQPostOpt()"
  1170.     #endif
  1171.     #ifndef OS_Q_QUERY_EN
  1172.     #error  "OS_CFG.H, Missing OS_Q_QUERY_EN: Include code for OSQQuery()"
  1173.     #endif
  1174. #endif
  1175. /*
  1176. *********************************************************************************************************
  1177. *                                              SEMAPHORES
  1178. *********************************************************************************************************
  1179. */
  1180. #ifndef OS_SEM_EN
  1181. #error  "OS_CFG.H, Missing OS_SEM_EN: Enable (1) or Disable (0) code generation for SEMAPHORES"
  1182. #else
  1183.     #ifndef OS_SEM_ACCEPT_EN
  1184.     #error  "OS_CFG.H, Missing OS_SEM_ACCEPT_EN: Include code for OSSemAccept()"
  1185.     #endif
  1186.     #ifndef OS_SEM_DEL_EN
  1187.     #error  "OS_CFG.H, Missing OS_SEM_DEL_EN: Include code for OSSemDel()"
  1188.     #endif
  1189.     #ifndef OS_SEM_QUERY_EN
  1190.     #error  "OS_CFG.H, Missing OS_SEM_QUERY_EN: Include code for OSSemQuery()"
  1191.     #endif
  1192.     #ifndef OS_SEM_SET_EN
  1193.     #error  "OS_CFG.H, Missing OS_SEM_SET_EN: Include code for OSSemSet()"
  1194.     #endif
  1195. #endif
  1196. /*
  1197. *********************************************************************************************************
  1198. *                                             TASK MANAGEMENT
  1199. *********************************************************************************************************
  1200. */
  1201. #ifndef OS_MAX_TASKS
  1202. #error  "OS_CFG.H, Missing OS_MAX_TASKS: Max. number of tasks in your application"
  1203. #else
  1204.     #if     OS_MAX_TASKS < 2
  1205.     #error  "OS_CFG.H,         OS_MAX_TASKS must be >= 2"
  1206.     #endif
  1207.     #if     OS_MAX_TASKS >  ((OS_LOWEST_PRIO - OS_N_SYS_TASKS) + 1)
  1208.     #error  "OS_CFG.H,         OS_MAX_TASKS must be <= OS_LOWEST_PRIO - OS_N_SYS_TASKS + 1"
  1209.     #endif
  1210. #endif
  1211. #if     OS_VERSION     <  280
  1212. #if     OS_LOWEST_PRIO >   63
  1213. #error  "OS_CFG.H,         OS_LOWEST_PRIO must be <= 63 in V2.7x or lower"
  1214. #endif
  1215. #endif
  1216. #if     OS_VERSION     >= 280
  1217. #if     OS_LOWEST_PRIO >  254
  1218. #error  "OS_CFG.H,         OS_LOWEST_PRIO must be <= 254 in V2.8x and higher"
  1219. #endif
  1220. #endif
  1221. #ifndef OS_TASK_IDLE_STK_SIZE
  1222. #error  "OS_CFG.H, Missing OS_TASK_IDLE_STK_SIZE: Idle task stack size"
  1223. #endif
  1224. #ifndef OS_TASK_STAT_EN
  1225. #error  "OS_CFG.H, Missing OS_TASK_STAT_EN: Enable (1) or Disable(0) the statistics task"
  1226. #endif
  1227. #ifndef OS_TASK_STAT_STK_SIZE
  1228. #error  "OS_CFG.H, Missing OS_TASK_STAT_STK_SIZE: Statistics task stack size"
  1229. #endif
  1230. #ifndef OS_TASK_STAT_STK_CHK_EN
  1231. #error  "OS_CFG.H, Missing OS_TASK_STAT_STK_CHK_EN: Check task stacks from statistics task"
  1232. #endif
  1233. #ifndef OS_TASK_CHANGE_PRIO_EN
  1234. #error  "OS_CFG.H, Missing OS_TASK_CHANGE_PRIO_EN: Include code for OSTaskChangePrio()"
  1235. #endif
  1236. #ifndef OS_TASK_CREATE_EN
  1237. #error  "OS_CFG.H, Missing OS_TASK_CREATE_EN: Include code for OSTaskCreate()"
  1238. #endif
  1239. #ifndef OS_TASK_CREATE_EXT_EN
  1240. #error  "OS_CFG.H, Missing OS_TASK_CREATE_EXT_EN: Include code for OSTaskCreateExt()"
  1241. #endif
  1242. #ifndef OS_TASK_DEL_EN
  1243. #error  "OS_CFG.H, Missing OS_TASK_DEL_EN: Include code for OSTaskDel()"
  1244. #endif
  1245. #ifndef OS_TASK_NAME_SIZE
  1246. #error  "OS_CFG.H, Missing OS_TASK_NAME_SIZE: Determine the size of task names"
  1247. #endif
  1248. #ifndef OS_TASK_SUSPEND_EN
  1249. #error  "OS_CFG.H, Missing OS_TASK_SUSPEND_EN: Include code for OSTaskSuspend() and OSTaskResume()"
  1250. #endif
  1251. #ifndef OS_TASK_QUERY_EN
  1252. #error  "OS_CFG.H, Missing OS_TASK_QUERY_EN: Include code for OSTaskQuery()"
  1253. #endif
  1254. /*
  1255. *********************************************************************************************************
  1256. *                                             TIME MANAGEMENT
  1257. *********************************************************************************************************
  1258. */
  1259. #ifndef OS_TICKS_PER_SEC
  1260. #error  "OS_CFG.H, Missing OS_TICKS_PER_SEC: Sets the number of ticks in one second"
  1261. #endif
  1262. #ifndef OS_TIME_DLY_HMSM_EN
  1263. #error  "OS_CFG.H, Missing OS_TIME_DLY_HMSM_EN: Include code for OSTimeDlyHMSM()"
  1264. #endif
  1265. #ifndef OS_TIME_DLY_RESUME_EN
  1266. #error  "OS_CFG.H, Missing OS_TIME_DLY_RESUME_EN: Include code for OSTimeDlyResume()"
  1267. #endif
  1268. #ifndef OS_TIME_GET_SET_EN
  1269. #error  "OS_CFG.H, Missing OS_TIME_GET_SET_EN: Include code for OSTimeGet() and OSTimeSet()"
  1270. #endif
  1271. /*
  1272. *********************************************************************************************************
  1273. *                                             TIMER MANAGEMENT
  1274. *********************************************************************************************************
  1275. */
  1276. #ifndef OS_TMR_EN
  1277. #error  "OS_CFG.H, Missing OS_TMR_EN: When (1) enables code generation for Timer Management"
  1278. #elif   OS_TMR_EN > 0
  1279.     #if     OS_SEM_EN == 0
  1280.     #error  "OS_CFG.H, Semaphore management is required (set OS_SEM_EN to 1) when enabling Timer Management."
  1281.     #error  "          Timer management require TWO semaphores."
  1282.     #endif
  1283.     #ifndef OS_TMR_CFG_MAX
  1284.     #error  "OS_CFG.H, Missing OS_TMR_CFG_MAX: Determines the total number of timers in an application (2 .. 65500)"
  1285.     #else
  1286.         #if OS_TMR_CFG_MAX < 2
  1287.         #error  "OS_CFG.H, OS_TMR_CFG_MAX should be between 2 and 65500"
  1288.         #endif
  1289.         #if OS_TMR_CFG_MAX > 65500
  1290.         #error  "OS_CFG.H, OS_TMR_CFG_MAX should be between 2 and 65500"
  1291.         #endif
  1292.     #endif
  1293.     #ifndef OS_TMR_CFG_WHEEL_SIZE
  1294.     #error  "OS_CFG.H, Missing OS_TMR_CFG_WHEEL_SIZE: Sets the size of the timer wheel (1 .. 1023)"
  1295.     #else
  1296.         #if OS_TMR_CFG_WHEEL_SIZE < 2
  1297.         #error  "OS_CFG.H, OS_TMR_CFG_WHEEL_SIZE should be between 2 and 1024"
  1298.         #endif
  1299.         #if OS_TMR_CFG_WHEEL_SIZE > 1024
  1300.         #error  "OS_CFG.H, OS_TMR_CFG_WHEEL_SIZE should be between 2 and 1024"
  1301.         #endif
  1302.     #endif
  1303.     #ifndef OS_TMR_CFG_NAME_SIZE
  1304.     #error  "OS_CFG.H, Missing OS_TMR_CFG_NAME_SIZE: Determines the number of characters used for Timer names"
  1305.     #endif
  1306.     #ifndef OS_TMR_CFG_TICKS_PER_SEC
  1307.     #error  "OS_CFG.H, Missing OS_TMR_CFG_TICKS_PER_SEC: Determines the rate at which tiem timer management task will run (Hz)"
  1308.     #endif
  1309.     #ifndef OS_TASK_TMR_STK_SIZE
  1310.     #error  "OS_CFG.H, Missing OS_TASK_TMR_STK_SIZE: Determines the size of the Timer Task's stack"
  1311.     #endif
  1312. #endif
  1313. /*
  1314. *********************************************************************************************************
  1315. *                                            MISCELLANEOUS
  1316. *********************************************************************************************************
  1317. */
  1318. #ifndef OS_ARG_CHK_EN
  1319. #error  "OS_CFG.H, Missing OS_ARG_CHK_EN: Enable (1) or Disable (0) argument checking"
  1320. #endif
  1321. #ifndef OS_CPU_HOOKS_EN
  1322. #error  "OS_CFG.H, Missing OS_CPU_HOOKS_EN: uC/OS-II hooks are found in the processor port files when 1"
  1323. #endif
  1324. #ifndef OS_DEBUG_EN
  1325. #error  "OS_CFG.H, Missing OS_DEBUG_EN: Allows you to include variables for debugging or not"
  1326. #endif
  1327. #ifndef OS_LOWEST_PRIO
  1328. #error  "OS_CFG.H, Missing OS_LOWEST_PRIO: Defines the lowest priority that can be assigned"
  1329. #endif
  1330. #ifndef OS_MAX_EVENTS
  1331. #error  "OS_CFG.H, Missing OS_MAX_EVENTS: Max. number of event control blocks in your application"
  1332. #else
  1333.     #if     OS_MAX_EVENTS > 65500u
  1334.     #error  "OS_CFG.H, OS_MAX_EVENTS must be <= 65500"
  1335.     #endif
  1336. #endif
  1337. #ifndef OS_SCHED_LOCK_EN
  1338. #error  "OS_CFG.H, Missing OS_SCHED_LOCK_EN: Include code for OSSchedLock() and OSSchedUnlock()"
  1339. #endif
  1340. #ifndef OS_TASK_PROFILE_EN
  1341. #error  "OS_CFG.H, Missing OS_TASK_PROFILE_EN: Include data structure for run-time task profiling"
  1342. #endif
  1343. #ifndef OS_TASK_SW_HOOK_EN
  1344. #error  "OS_CFG.H, Missing OS_TASK_SW_HOOK_EN: Allows you to include the code for OSTaskSwHook() or not"
  1345. #endif
  1346. #ifndef OS_TICK_STEP_EN
  1347. #error  "OS_CFG.H, Missing OS_TICK_STEP_EN: Allows to 'step' one tick at a time with uC/OS-View"
  1348. #endif
  1349. #ifndef OS_TIME_TICK_HOOK_EN
  1350. #error  "OS_CFG.H, Missing OS_TIME_TICK_HOOK_EN: Allows you to include the code for OSTimeTickHook() or not"
  1351. #endif
  1352. #ifndef OS_VIEW_MODULE
  1353. #error  "OS_CFG.H, Missing OS_VIEW_MODULE: (1) means that uC/OS-View is present, (0) means it's absent"
  1354. #endif
  1355. #ifdef __cplusplus
  1356. }
  1357. #endif
  1358. #endif