ucos_ii.h
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:70k
源码类别:

uCOS

开发平台:

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