LPCOpen Platform  v1.03
LPCOpen Platform for NXP LPC Microcontrollers
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
os.h
Go to the documentation of this file.
1 /*
2 ************************************************************************************************************************
3 * uC/OS-III
4 * The Real-Time Kernel
5 *
6 * (c) Copyright 2009-2012; Micrium, Inc.; Weston, FL
7 * All rights reserved. Protected by international copyright laws.
8 *
9 * File : OS.H
10 * By : JJL
11 * Version : V3.03.00
12 *
13 * LICENSING TERMS:
14 * ---------------
15 * uC/OS-III is provided in source form for FREE short-term evaluation, for educational use or
16 * for peaceful research. If you plan or intend to use uC/OS-III in a commercial application/
17 * product then, you need to contact Micrium to properly license uC/OS-III for its use in your
18 * application/product. We provide ALL the source code for your convenience and to help you
19 * experience uC/OS-III. The fact that the source is provided does NOT mean that you can use
20 * it commercially without paying a licensing fee.
21 *
22 * Knowledge of the source code may NOT be used to develop a similar product.
23 *
24 * Please help us continue to provide the embedded community with the finest software available.
25 * Your honesty is greatly appreciated.
26 *
27 * You can contact us at www.micrium.com, or by phone at +1 (954) 217-2036.
28 ************************************************************************************************************************
29 * Note(s) : (1) Assumes the following versions (or more recent) of software modules are included in the project build:
30 *
31 * (a) uC/LIB V1.36.01
32 * (b) uC/CPU V1.29.00
33 ************************************************************************************************************************
34 */
35 
36 #ifndef OS_H
37 #define OS_H
38 
39 /*
40 ************************************************************************************************************************
41 * uC/OS-III VERSION NUMBER
42 ************************************************************************************************************************
43 */
44 
45 #define OS_VERSION 30300u /* Version of uC/OS-III (Vx.yy.zz mult. by 10000) */
46 
47 /*
48 ************************************************************************************************************************
49 * INCLUDE HEADER FILES
50 ************************************************************************************************************************
51 */
52 
53 #ifdef __cplusplus
54 extern "C" {
55 #endif
56 
57 
58 
59 #include <os_cfg.h>
60 #include <cpu.h>
61 #include <cpu_core.h>
62 #include <lib_def.h>
63 #include <os_type.h>
64 #include <os_cpu.h>
65 
66 
67 /*
68 ************************************************************************************************************************
69 * CRITICAL SECTION HANDLING
70 ************************************************************************************************************************
71 */
72 
73 
74 #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u && defined(CPU_CFG_INT_DIS_MEAS_EN)
75 #define OS_SCHED_LOCK_TIME_MEAS_START() OS_SchedLockTimeMeasStart()
76 #else
77 #define OS_SCHED_LOCK_TIME_MEAS_START()
78 #endif
79 
80 
81 #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u && defined(CPU_CFG_INT_DIS_MEAS_EN)
82 #define OS_SCHED_LOCK_TIME_MEAS_STOP() OS_SchedLockTimeMeasStop()
83 #else
84 #define OS_SCHED_LOCK_TIME_MEAS_STOP()
85 #endif
86 
87 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u /* Deferred ISR Posts ------------------------------ */
88  /* Lock the scheduler */
89 #define OS_CRITICAL_ENTER() \
90  do { \
91  CPU_CRITICAL_ENTER(); \
92  OSSchedLockNestingCtr++; \
93  if (OSSchedLockNestingCtr == 1u) { \
94  OS_SCHED_LOCK_TIME_MEAS_START(); \
95  } \
96  CPU_CRITICAL_EXIT(); \
97  } while (0)
98  /* Lock the scheduler but re-enable interrupts */
99 #define OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT() \
100  do { \
101  OSSchedLockNestingCtr++; \
102  \
103  if (OSSchedLockNestingCtr == 1u) { \
104  OS_SCHED_LOCK_TIME_MEAS_START(); \
105  } \
106  CPU_CRITICAL_EXIT(); \
107  } while (0)
108 
109  /* Scheduling occurs only if an interrupt occurs */
110 #define OS_CRITICAL_EXIT() \
111  do { \
112  CPU_CRITICAL_ENTER(); \
113  OSSchedLockNestingCtr--; \
114  if (OSSchedLockNestingCtr == (OS_NESTING_CTR)0) { \
115  OS_SCHED_LOCK_TIME_MEAS_STOP(); \
116  if (OSIntQNbrEntries > (OS_OBJ_QTY)0) { \
117  CPU_CRITICAL_EXIT(); \
118  OS_Sched0(); \
119  } else { \
120  CPU_CRITICAL_EXIT(); \
121  } \
122  } else { \
123  CPU_CRITICAL_EXIT(); \
124  } \
125  } while (0)
126 
127 #define OS_CRITICAL_EXIT_NO_SCHED() \
128  do { \
129  CPU_CRITICAL_ENTER(); \
130  OSSchedLockNestingCtr--; \
131  if (OSSchedLockNestingCtr == (OS_NESTING_CTR)0) { \
132  OS_SCHED_LOCK_TIME_MEAS_STOP(); \
133  } \
134  CPU_CRITICAL_EXIT(); \
135  } while (0)
136 
137 
138 #else /* Direct ISR Posts -------------------------------- */
139 
140 
141 #define OS_CRITICAL_ENTER() CPU_CRITICAL_ENTER()
142 
143 #define OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT()
144 
145 #define OS_CRITICAL_EXIT() CPU_CRITICAL_EXIT()
146 
147 #define OS_CRITICAL_EXIT_NO_SCHED() CPU_CRITICAL_EXIT()
148 
149 #endif
150 
151 /*
152 ************************************************************************************************************************
153 * MISCELLANEOUS
154 ************************************************************************************************************************
155 */
156 
157 #ifdef OS_GLOBALS
158 #define OS_EXT
159 #else
160 #define OS_EXT extern
161 #endif
162 
163 
164 #define OS_PRIO_TBL_SIZE (((OS_CFG_PRIO_MAX - 1u) / DEF_INT_CPU_NBR_BITS) + 1u)
165 
166 #define OS_MSG_EN (((OS_CFG_TASK_Q_EN > 0u) || (OS_CFG_Q_EN > 0u)) ? 1u : 0u)
167 
168 /*$PAGE*/
169 /*
170 ************************************************************************************************************************
171 ************************************************************************************************************************
172 * # D E F I N E S
173 ************************************************************************************************************************
174 ************************************************************************************************************************
175 */
176 
177 /*
178 ========================================================================================================================
179 * TASK STATUS
180 ========================================================================================================================
181 */
182 
183 #define OS_STATE_OS_STOPPED (OS_STATE)(0u)
184 #define OS_STATE_OS_RUNNING (OS_STATE)(1u)
185 
186 #define OS_STATE_NOT_RDY (CPU_BOOLEAN)(0u)
187 #define OS_STATE_RDY (CPU_BOOLEAN)(1u)
188 
189 
190  /* ------------------- TASK STATES ------------------ */
191 #define OS_TASK_STATE_BIT_DLY (OS_STATE)(0x01u) /* /-------- SUSPENDED bit */
192  /* | */
193 #define OS_TASK_STATE_BIT_PEND (OS_STATE)(0x02u) /* | /----- PEND bit */
194  /* | | */
195 #define OS_TASK_STATE_BIT_SUSPENDED (OS_STATE)(0x04u) /* | | /--- Delayed/Timeout bit */
196  /* | | | */
197  /* V V V */
198 
199 #define OS_TASK_STATE_RDY (OS_STATE)( 0u) /* 0 0 0 Ready */
200 #define OS_TASK_STATE_DLY (OS_STATE)( 1u) /* 0 0 1 Delayed or Timeout */
201 #define OS_TASK_STATE_PEND (OS_STATE)( 2u) /* 0 1 0 Pend */
202 #define OS_TASK_STATE_PEND_TIMEOUT (OS_STATE)( 3u) /* 0 1 1 Pend + Timeout */
203 #define OS_TASK_STATE_SUSPENDED (OS_STATE)( 4u) /* 1 0 0 Suspended */
204 #define OS_TASK_STATE_DLY_SUSPENDED (OS_STATE)( 5u) /* 1 0 1 Suspended + Delayed or Timeout */
205 #define OS_TASK_STATE_PEND_SUSPENDED (OS_STATE)( 6u) /* 1 1 0 Suspended + Pend */
206 #define OS_TASK_STATE_PEND_TIMEOUT_SUSPENDED (OS_STATE)( 7u) /* 1 1 1 Suspended + Pend + Timeout */
207 #define OS_TASK_STATE_DEL (OS_STATE)(255u)
208 
209  /* ----------------- PENDING ON ... ----------------- */
210 #define OS_TASK_PEND_ON_NOTHING (OS_STATE)( 0u) /* Pending on nothing */
211 #define OS_TASK_PEND_ON_FLAG (OS_STATE)( 1u) /* Pending on event flag group */
212 #define OS_TASK_PEND_ON_TASK_Q (OS_STATE)( 2u) /* Pending on message to be sent to task */
213 #define OS_TASK_PEND_ON_MULTI (OS_STATE)( 3u) /* Pending on multiple semaphores and/or queues */
214 #define OS_TASK_PEND_ON_MUTEX (OS_STATE)( 4u) /* Pending on mutual exclusion semaphore */
215 #define OS_TASK_PEND_ON_Q (OS_STATE)( 5u) /* Pending on queue */
216 #define OS_TASK_PEND_ON_SEM (OS_STATE)( 6u) /* Pending on semaphore */
217 #define OS_TASK_PEND_ON_TASK_SEM (OS_STATE)( 7u) /* Pending on signal to be sent to task */
218 
219 /*
220 ------------------------------------------------------------------------------------------------------------------------
221 * TASK PEND STATUS
222 * (Status codes for OS_TCBs field .PendStatus)
223 ------------------------------------------------------------------------------------------------------------------------
224 */
225 
226 #define OS_STATUS_PEND_OK (OS_STATUS)( 0u) /* Pending status OK, !pending, or pending complete */
227 #define OS_STATUS_PEND_ABORT (OS_STATUS)( 1u) /* Pending aborted */
228 #define OS_STATUS_PEND_DEL (OS_STATUS)( 2u) /* Pending object deleted */
229 #define OS_STATUS_PEND_TIMEOUT (OS_STATUS)( 3u) /* Pending timed out */
230 
231 /*
232 ========================================================================================================================
233 * OS OBJECT TYPES
234 *
235 * Note(s) : (1) OS_OBJ_TYPE_&&& #define values specifically chosen as ASCII representations of the kernel
236 * object types. Memory displays of kernel objects will display the kernel object TYPEs with
237 * their chosen ASCII names.
238 ========================================================================================================================
239 */
240 
241 #define OS_OBJ_TYPE_NONE (OS_OBJ_TYPE)CPU_TYPE_CREATE('N', 'O', 'N', 'E')
242 #define OS_OBJ_TYPE_FLAG (OS_OBJ_TYPE)CPU_TYPE_CREATE('F', 'L', 'A', 'G')
243 #define OS_OBJ_TYPE_MEM (OS_OBJ_TYPE)CPU_TYPE_CREATE('M', 'E', 'M', ' ')
244 #define OS_OBJ_TYPE_MUTEX (OS_OBJ_TYPE)CPU_TYPE_CREATE('M', 'U', 'T', 'X')
245 #define OS_OBJ_TYPE_Q (OS_OBJ_TYPE)CPU_TYPE_CREATE('Q', 'U', 'E', 'U')
246 #define OS_OBJ_TYPE_SEM (OS_OBJ_TYPE)CPU_TYPE_CREATE('S', 'E', 'M', 'A')
247 #define OS_OBJ_TYPE_TASK_MSG (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'M', 'S', 'G')
248 #define OS_OBJ_TYPE_TASK_RESUME (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'R', 'E', 'S')
249 #define OS_OBJ_TYPE_TASK_SIGNAL (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'S', 'I', 'G')
250 #define OS_OBJ_TYPE_TASK_SUSPEND (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'S', 'U', 'S')
251 #define OS_OBJ_TYPE_TICK (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'I', 'C', 'K')
252 #define OS_OBJ_TYPE_TMR (OS_OBJ_TYPE)CPU_TYPE_CREATE('T', 'M', 'R', ' ')
253 
254 /*
255 ========================================================================================================================
256 * Possible values for 'opt' argument
257 ========================================================================================================================
258 */
259 
260 #define OS_OPT_NONE (OS_OPT)(0x0000u)
261 
262 /*
263 ------------------------------------------------------------------------------------------------------------------------
264 * DELETE OPTIONS
265 ------------------------------------------------------------------------------------------------------------------------
266 */
267 
268 #define OS_OPT_DEL_NO_PEND (OS_OPT)(0x0000u)
269 #define OS_OPT_DEL_ALWAYS (OS_OPT)(0x0001u)
270 
271 /*
272 ------------------------------------------------------------------------------------------------------------------------
273 * PEND OPTIONS
274 ------------------------------------------------------------------------------------------------------------------------
275 */
276 
277 #define OS_OPT_PEND_FLAG_MASK (OS_OPT)(0x000Fu)
278 #define OS_OPT_PEND_FLAG_CLR_ALL (OS_OPT)(0x0001u) /* Wait for ALL the bits specified to be CLR */
279 #define OS_OPT_PEND_FLAG_CLR_AND (OS_OPT)(0x0001u)
280 
281 #define OS_OPT_PEND_FLAG_CLR_ANY (OS_OPT)(0x0002u) /* Wait for ANY of the bits specified to be CLR */
282 #define OS_OPT_PEND_FLAG_CLR_OR (OS_OPT)(0x0002u)
283 
284 #define OS_OPT_PEND_FLAG_SET_ALL (OS_OPT)(0x0004u) /* Wait for ALL the bits specified to be SET */
285 #define OS_OPT_PEND_FLAG_SET_AND (OS_OPT)(0x0004u)
286 
287 #define OS_OPT_PEND_FLAG_SET_ANY (OS_OPT)(0x0008u) /* Wait for ANY of the bits specified to be SET */
288 #define OS_OPT_PEND_FLAG_SET_OR (OS_OPT)(0x0008u)
289 
290 #define OS_OPT_PEND_FLAG_CONSUME (OS_OPT)(0x0100u) /* Consume the flags if condition(s) satisfied */
291 
292 
293 #define OS_OPT_PEND_BLOCKING (OS_OPT)(0x0000u)
294 #define OS_OPT_PEND_NON_BLOCKING (OS_OPT)(0x8000u)
295 
296 /*
297 ------------------------------------------------------------------------------------------------------------------------
298 * PEND ABORT OPTIONS
299 ------------------------------------------------------------------------------------------------------------------------
300 */
301 
302 #define OS_OPT_PEND_ABORT_1 (OS_OPT)(0x0000u) /* Pend abort a single waiting task */
303 #define OS_OPT_PEND_ABORT_ALL (OS_OPT)(0x0100u) /* Pend abort ALL tasks waiting */
304 
305 /*
306 ------------------------------------------------------------------------------------------------------------------------
307 * POST OPTIONS
308 ------------------------------------------------------------------------------------------------------------------------
309 */
310 
311 
312 #define OS_OPT_POST_NONE (OS_OPT)(0x0000u)
313 
314 #define OS_OPT_POST_FLAG_SET (OS_OPT)(0x0000u)
315 #define OS_OPT_POST_FLAG_CLR (OS_OPT)(0x0001u)
316 
317 #define OS_OPT_POST_FIFO (OS_OPT)(0x0000u) /* Default is to post FIFO */
318 #define OS_OPT_POST_LIFO (OS_OPT)(0x0010u) /* Post to highest priority task waiting */
319 #define OS_OPT_POST_1 (OS_OPT)(0x0000u) /* Post message to highest priority task waiting */
320 #define OS_OPT_POST_ALL (OS_OPT)(0x0200u) /* Broadcast message to ALL tasks waiting */
321 
322 #define OS_OPT_POST_NO_SCHED (OS_OPT)(0x8000u) /* Do not call the scheduler if this is selected */
323 
324 /*
325 ------------------------------------------------------------------------------------------------------------------------
326 * TASK OPTIONS
327 ------------------------------------------------------------------------------------------------------------------------
328 */
329 
330 #define OS_OPT_TASK_NONE (OS_OPT)(0x0000u) /* No option selected */
331 #define OS_OPT_TASK_STK_CHK (OS_OPT)(0x0001u) /* Enable stack checking for the task */
332 #define OS_OPT_TASK_STK_CLR (OS_OPT)(0x0002u) /* Clear the stack when the task is create */
333 #define OS_OPT_TASK_SAVE_FP (OS_OPT)(0x0004u) /* Save the contents of any floating-point registers */
334 #define OS_OPT_TASK_NO_TLS (OS_OPT)(0x0008u) /* Specifies the task DOES NOT require TLS support */
335 
336 /*
337 ------------------------------------------------------------------------------------------------------------------------
338 * TIME OPTIONS
339 ------------------------------------------------------------------------------------------------------------------------
340 */
341 
342 #define OS_OPT_TIME_DLY DEF_BIT_NONE
343 #define OS_OPT_TIME_TIMEOUT ((OS_OPT)DEF_BIT_01)
344 #define OS_OPT_TIME_MATCH ((OS_OPT)DEF_BIT_02)
345 #define OS_OPT_TIME_PERIODIC ((OS_OPT)DEF_BIT_03)
346 
347 #define OS_OPT_TIME_HMSM_STRICT ((OS_OPT)DEF_BIT_NONE)
348 #define OS_OPT_TIME_HMSM_NON_STRICT ((OS_OPT)DEF_BIT_04)
349 
350 #define OS_OPT_TIME_MASK ((OS_OPT)(OS_OPT_TIME_DLY | \
351  OS_OPT_TIME_TIMEOUT | \
352  OS_OPT_TIME_PERIODIC | \
353  OS_OPT_TIME_MATCH))
354 
355 #define OS_OPT_TIME_OPTS_MASK (OS_OPT_TIME_DLY | \
356  OS_OPT_TIME_TIMEOUT | \
357  OS_OPT_TIME_PERIODIC | \
358  OS_OPT_TIME_MATCH | \
359  OS_OPT_TIME_HMSM_NON_STRICT)
360 
361 /*
362 ------------------------------------------------------------------------------------------------------------------------
363 * TIMER OPTIONS
364 ------------------------------------------------------------------------------------------------------------------------
365 */
366 
367 #define OS_OPT_TMR_NONE (OS_OPT)(0u) /* No option selected */
368 
369 #define OS_OPT_TMR_ONE_SHOT (OS_OPT)(1u) /* Timer will not auto restart when it expires */
370 #define OS_OPT_TMR_PERIODIC (OS_OPT)(2u) /* Timer will auto restart when it expires */
371 
372 #define OS_OPT_TMR_CALLBACK (OS_OPT)(3u) /* OSTmrStop() option to call 'callback' w/ timer arg */
373 #define OS_OPT_TMR_CALLBACK_ARG (OS_OPT)(4u) /* OSTmrStop() option to call 'callback' w/ new arg */
374 
375 /*
376 ------------------------------------------------------------------------------------------------------------------------
377 * TIMER STATES
378 ------------------------------------------------------------------------------------------------------------------------
379 */
380 
381 #define OS_TMR_STATE_UNUSED (OS_STATE)(0u)
382 #define OS_TMR_STATE_STOPPED (OS_STATE)(1u)
383 #define OS_TMR_STATE_RUNNING (OS_STATE)(2u)
384 #define OS_TMR_STATE_COMPLETED (OS_STATE)(3u)
385 
386 /*
387 ------------------------------------------------------------------------------------------------------------------------
388 * PRIORITY
389 ------------------------------------------------------------------------------------------------------------------------
390 */
391  /* Dflt prio to init task TCB */
392 #define OS_PRIO_INIT (OS_PRIO)(OS_CFG_PRIO_MAX)
393 
394 /*
395 ------------------------------------------------------------------------------------------------------------------------
396 * TIMER TICK THRESHOLDS
397 ------------------------------------------------------------------------------------------------------------------------
398 */
399  /* Threshold to init previous tick time */
400 #define OS_TICK_TH_INIT (OS_TICK)(DEF_BIT ((sizeof(OS_TICK) * DEF_OCTET_NBR_BITS) - 1u))
401 
402  /* Threshold to check if tick time already ready */
403 #define OS_TICK_TH_RDY (OS_TICK)(DEF_BIT_FIELD(((sizeof(OS_TICK) * DEF_OCTET_NBR_BITS) / 2u), \
404  ((sizeof(OS_TICK) * DEF_OCTET_NBR_BITS) / 2u)))
405 
406 /*$PAGE*/
407 /*
408 ************************************************************************************************************************
409 ************************************************************************************************************************
410 * E N U M E R A T I O N S
411 ************************************************************************************************************************
412 ************************************************************************************************************************
413 */
414 
415 /*
416 ------------------------------------------------------------------------------------------------------------------------
417 * ERROR CODES
418 ------------------------------------------------------------------------------------------------------------------------
419 */
420 
421 typedef enum os_err {
423 
424  OS_ERR_A = 10000u,
426 
427  OS_ERR_B = 11000u,
428 
429  OS_ERR_C = 12000u,
431 
432  OS_ERR_D = 13000u,
433  OS_ERR_DEL_ISR = 13001u,
434 
435  OS_ERR_E = 14000u,
436 
437  OS_ERR_F = 15000u,
439 
444 
445  OS_ERR_G = 16000u,
446 
447  OS_ERR_H = 17000u,
448 
449  OS_ERR_I = 18000u,
451  OS_ERR_INT_Q = 18002u,
456 
457  OS_ERR_J = 19000u,
458 
459  OS_ERR_K = 20000u,
460 
461  OS_ERR_L = 21000u,
463 
464  OS_ERR_M = 22000u,
465 
467  OS_ERR_MEM_FULL = 22202u,
476 
479 
483 
484  OS_ERR_N = 23000u,
485  OS_ERR_NAME = 23001u,
487 
488  OS_ERR_O = 24000u,
490  OS_ERR_OBJ_DEL = 24002u,
492  OS_ERR_OBJ_TYPE = 24004u,
493 
495 
498 
499  OS_ERR_P = 25000u,
504  OS_ERR_PEND_DEL = 25005u,
505  OS_ERR_PEND_ISR = 25006u,
508 
510  OS_ERR_POST_ISR = 25102u,
511 
513  OS_ERR_PRIO = 25202u,
515 
517 
518  OS_ERR_Q = 26000u,
519  OS_ERR_Q_FULL = 26001u,
520  OS_ERR_Q_EMPTY = 26002u,
521  OS_ERR_Q_MAX = 26003u,
522  OS_ERR_Q_SIZE = 26004u,
523 
524  OS_ERR_R = 27000u,
528 
529  OS_ERR_S = 28000u,
535 
536  OS_ERR_SEM_OVF = 28101u,
537  OS_ERR_SET_ISR = 28102u,
538 
548 
549  OS_ERR_T = 29000u,
552  OS_ERR_TASK_DEL = 29003u,
561  OS_ERR_TASK_OPT = 29012u,
573 
575 
577  OS_ERR_TLS_ISR = 29121u,
581 
586 
597 
598  OS_ERR_TIMEOUT = 29401u,
599 
606  OS_ERR_TMR_ISR = 29507u,
613 
614  OS_ERR_U = 30000u,
615 
616  OS_ERR_V = 31000u,
617 
618  OS_ERR_W = 32000u,
619 
620  OS_ERR_X = 33000u,
621 
622  OS_ERR_Y = 34000u,
624 
625  OS_ERR_Z = 35000u
626 } OS_ERR;
627 
628 
629 /*$PAGE*/
630 /*
631 ************************************************************************************************************************
632 ************************************************************************************************************************
633 * D A T A T Y P E S
634 ************************************************************************************************************************
635 ************************************************************************************************************************
636 */
637 
638 typedef struct os_flag_grp OS_FLAG_GRP;
639 
640 typedef struct os_mem OS_MEM;
641 
642 typedef struct os_msg OS_MSG;
643 typedef struct os_msg_pool OS_MSG_POOL;
644 typedef struct os_msg_q OS_MSG_Q;
645 
646 typedef struct os_mutex OS_MUTEX;
647 
648 typedef struct os_int_q OS_INT_Q;
649 
650 typedef struct os_q OS_Q;
651 
652 typedef struct os_sem OS_SEM;
653 
654 typedef void (*OS_TASK_PTR)(void *p_arg);
655 
656 typedef struct os_tcb OS_TCB;
657 
658 #if defined(OS_CFG_TLS_TBL_SIZE) && (OS_CFG_TLS_TBL_SIZE > 0u)
659 typedef void *OS_TLS;
660 
661 typedef CPU_DATA OS_TLS_ID;
662 
663 typedef void (*OS_TLS_DESTRUCT_PTR)(OS_TCB *p_tcb,
664  OS_TLS_ID id,
665  OS_TLS value);
666 #endif
667 
668 typedef struct os_rdy_list OS_RDY_LIST;
669 
670 typedef struct os_tick_spoke OS_TICK_SPOKE;
671 
672 typedef void (*OS_TMR_CALLBACK_PTR)(void *p_tmr, void *p_arg);
673 typedef struct os_tmr OS_TMR;
674 typedef struct os_tmr_spoke OS_TMR_SPOKE;
675 
676 
677 typedef struct os_pend_data OS_PEND_DATA;
678 typedef struct os_pend_list OS_PEND_LIST;
679 typedef struct os_pend_obj OS_PEND_OBJ;
680 
681 #if OS_CFG_APP_HOOKS_EN > 0u
682 typedef void (*OS_APP_HOOK_VOID)(void);
683 typedef void (*OS_APP_HOOK_TCB)(OS_TCB *p_tcb);
684 #endif
685 
686 /*$PAGE*/
687 /*
688 ************************************************************************************************************************
689 ************************************************************************************************************************
690 * D A T A S T R U C T U R E S
691 ************************************************************************************************************************
692 ************************************************************************************************************************
693 */
694 
695 /*
696 ------------------------------------------------------------------------------------------------------------------------
697 * ISR POST DATA
698 ------------------------------------------------------------------------------------------------------------------------
699 */
700 
701 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
702 struct os_int_q {
703  OS_OBJ_TYPE Type; /* Type of object placed in the circular list */
704  OS_INT_Q *NextPtr; /* Pointer to next OS_INT_Q in circular list */
705  void *ObjPtr; /* Pointer to object placed in the queue */
706  void *MsgPtr; /* Pointer to message if posting to a message queue */
707  OS_MSG_SIZE MsgSize; /* Message Size if posting to a message queue */
708  OS_FLAGS Flags; /* Value of flags if posting to an event flag group */
709  OS_OPT Opt; /* Post Options */
710  CPU_TS TS; /* Timestamp */
711 };
712 #endif
713 
714 /*
715 ------------------------------------------------------------------------------------------------------------------------
716 * READY LIST
717 ------------------------------------------------------------------------------------------------------------------------
718 */
719 
720 struct os_rdy_list {
721  OS_TCB *HeadPtr; /* Pointer to task that will run at selected priority */
722  OS_TCB *TailPtr; /* Pointer to last task at selected priority */
723  OS_OBJ_QTY NbrEntries; /* Number of entries at selected priority */
724 };
725 
726 
727 /*
728 ------------------------------------------------------------------------------------------------------------------------
729 * PEND DATA and PEND LIST
730 ------------------------------------------------------------------------------------------------------------------------
731 */
732 
733 struct os_pend_data {
734  OS_PEND_DATA *PrevPtr;
735  OS_PEND_DATA *NextPtr;
736  OS_TCB *TCBPtr;
737  OS_PEND_OBJ *PendObjPtr;
738  OS_PEND_OBJ *RdyObjPtr;
739  void *RdyMsgPtr;
742 };
743 
744 
745 struct os_pend_list {
746  OS_PEND_DATA *HeadPtr;
747  OS_PEND_DATA *TailPtr;
749 };
750 
751 
752 /*
753 ------------------------------------------------------------------------------------------------------------------------
754 * PEND OBJ
755 *
756 * Note(s) : (1) The 'os_pend_obj' structure data type is a template/subset for specific kernel objects' data types:
757 * 'os_flag_grp', 'os_mutex', 'os_q', and 'os_sem'. Each specific kernel object data type MUST define
758 * ALL generic OS pend object parameters, synchronized in both the sequential order & data type of each
759 * parameter.
760 *
761 * Thus, ANY modification to the sequential order or data types of OS pend object parameters MUST be
762 * appropriately synchronized between the generic OS pend object data type & ALL specific kernel objects'
763 * data types.
764 ------------------------------------------------------------------------------------------------------------------------
765 */
766 
767 struct os_pend_obj {
770  OS_PEND_LIST PendList; /* List of tasks pending on object */
771 #if OS_CFG_DBG_EN > 0u
772  void *DbgPrevPtr;
773  void *DbgNextPtr;
774  CPU_CHAR *DbgNamePtr;
775 #endif
776 };
777 
778 
779 /*
780 ------------------------------------------------------------------------------------------------------------------------
781 * EVENT FLAGS
782 *
783 * Note(s) : See PEND OBJ Note #1'.
784 ------------------------------------------------------------------------------------------------------------------------
785 */
786 
787 
788 struct os_flag_grp { /* Event Flag Group */
789  /* ------------------ GENERIC MEMBERS ------------------ */
790  OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_FLAG */
791  CPU_CHAR *NamePtr; /* Pointer to Event Flag Name (NUL terminated ASCII) */
792  OS_PEND_LIST PendList; /* List of tasks waiting on event flag group */
793 #if OS_CFG_DBG_EN > 0u
794  OS_FLAG_GRP *DbgPrevPtr;
795  OS_FLAG_GRP *DbgNextPtr;
796  CPU_CHAR *DbgNamePtr;
797 #endif
798  /* ------------------ SPECIFIC MEMBERS ------------------ */
799  OS_FLAGS Flags; /* 8, 16 or 32 bit flags */
800  CPU_TS TS; /* Timestamp of when last post occurred */
801 };
802 
803 /*$PAGE*/
804 /*
805 ------------------------------------------------------------------------------------------------------------------------
806 * MEMORY PARTITIONS
807 ------------------------------------------------------------------------------------------------------------------------
808 */
809 
810 
811 struct os_mem { /* MEMORY CONTROL BLOCK */
812  OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_MEM */
813  void *AddrPtr; /* Pointer to beginning of memory partition */
815  void *FreeListPtr; /* Pointer to list of free memory blocks */
816  OS_MEM_SIZE BlkSize; /* Size (in bytes) of each block of memory */
817  OS_MEM_QTY NbrMax; /* Total number of blocks in this partition */
818  OS_MEM_QTY NbrFree; /* Number of memory blocks remaining in this partition */
819 #if OS_CFG_DBG_EN > 0u
820  OS_MEM *DbgPrevPtr;
821  OS_MEM *DbgNextPtr;
822 #endif
823 };
824 
825 /*$PAGE*/
826 /*
827 ------------------------------------------------------------------------------------------------------------------------
828 * MESSAGES
829 ------------------------------------------------------------------------------------------------------------------------
830 */
831 
832 struct os_msg { /* MESSAGE CONTROL BLOCK */
833  OS_MSG *NextPtr; /* Pointer to next message */
834  void *MsgPtr; /* Actual message */
835  OS_MSG_SIZE MsgSize; /* Size of the message (in # bytes) */
836  CPU_TS MsgTS; /* Time stamp of when message was sent */
837 };
838 
839 
840 
841 
842 struct os_msg_pool { /* OS_MSG POOL */
843  OS_MSG *NextPtr; /* Pointer to next message */
844  OS_MSG_QTY NbrFree; /* Number of messages available from this pool */
845  OS_MSG_QTY NbrUsed; /* Current number of messages used */
846  OS_MSG_QTY NbrUsedMax; /* Peak number of messages used */
847 };
848 
849 
850 
851 struct os_msg_q { /* OS_MSG_Q */
852  OS_MSG *InPtr; /* Pointer to next OS_MSG to be inserted in the queue */
853  OS_MSG *OutPtr; /* Pointer to next OS_MSG to be extracted from the queue */
854  OS_MSG_QTY NbrEntriesSize; /* Maximum allowable number of entries in the queue */
855  OS_MSG_QTY NbrEntries; /* Current number of entries in the queue */
856  OS_MSG_QTY NbrEntriesMax; /* Peak number of entries in the queue */
857 };
858 
859 /*$PAGE*/
860 /*
861 ------------------------------------------------------------------------------------------------------------------------
862 * MUTUAL EXCLUSION SEMAPHORES
863 *
864 * Note(s) : See PEND OBJ Note #1'.
865 ------------------------------------------------------------------------------------------------------------------------
866 */
867 
868 struct os_mutex { /* Mutual Exclusion Semaphore */
869  /* ------------------ GENERIC MEMBERS ------------------ */
870  OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_MUTEX */
871  CPU_CHAR *NamePtr; /* Pointer to Mutex Name (NUL terminated ASCII) */
872  OS_PEND_LIST PendList; /* List of tasks waiting on mutex */
873 #if OS_CFG_DBG_EN > 0u
874  OS_MUTEX *DbgPrevPtr;
875  OS_MUTEX *DbgNextPtr;
876  CPU_CHAR *DbgNamePtr;
877 #endif
878  /* ------------------ SPECIFIC MEMBERS ------------------ */
879  OS_TCB *OwnerTCBPtr;
881  OS_NESTING_CTR OwnerNestingCtr; /* Mutex is available when the counter is 0 */
883 };
884 
885 /*$PAGE*/
886 /*
887 ------------------------------------------------------------------------------------------------------------------------
888 * MESSAGE QUEUES
889 *
890 * Note(s) : See PEND OBJ Note #1'.
891 ------------------------------------------------------------------------------------------------------------------------
892 */
893 
894 struct os_q { /* Message Queue */
895  /* ------------------ GENERIC MEMBERS ------------------ */
896  OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_Q */
897  CPU_CHAR *NamePtr; /* Pointer to Message Queue Name (NUL terminated ASCII) */
898  OS_PEND_LIST PendList; /* List of tasks waiting on message queue */
899 #if OS_CFG_DBG_EN > 0u
900  OS_Q *DbgPrevPtr;
901  OS_Q *DbgNextPtr;
902  CPU_CHAR *DbgNamePtr;
903 #endif
904  /* ------------------ SPECIFIC MEMBERS ------------------ */
905  OS_MSG_Q MsgQ; /* List of messages */
906 };
907 
908 /*$PAGE*/
909 /*
910 ------------------------------------------------------------------------------------------------------------------------
911 * SEMAPHORES
912 *
913 * Note(s) : See PEND OBJ Note #1'.
914 ------------------------------------------------------------------------------------------------------------------------
915 */
916 
917 struct os_sem { /* Semaphore */
918  /* ------------------ GENERIC MEMBERS ------------------ */
919  OS_OBJ_TYPE Type; /* Should be set to OS_OBJ_TYPE_SEM */
920  CPU_CHAR *NamePtr; /* Pointer to Semaphore Name (NUL terminated ASCII) */
921  OS_PEND_LIST PendList; /* List of tasks waiting on semaphore */
922 #if OS_CFG_DBG_EN > 0u
923  OS_SEM *DbgPrevPtr;
924  OS_SEM *DbgNextPtr;
925  CPU_CHAR *DbgNamePtr;
926 #endif
927  /* ------------------ SPECIFIC MEMBERS ------------------ */
930 };
931 
932 /*$PAGE*/
933 /*
934 ------------------------------------------------------------------------------------------------------------------------
935 * TASK CONTROL BLOCK
936 ------------------------------------------------------------------------------------------------------------------------
937 */
938 
939 struct os_tcb {
940  CPU_STK *StkPtr; /* Pointer to current top of stack */
941 
942  void *ExtPtr; /* Pointer to user definable data for TCB extension */
943 
944  CPU_STK *StkLimitPtr; /* Pointer used to set stack 'watermark' limit */
945 
946  OS_TCB *NextPtr; /* Pointer to next TCB in the TCB list */
947  OS_TCB *PrevPtr; /* Pointer to previous TCB in the TCB list */
948 
949  OS_TCB *TickNextPtr;
950  OS_TCB *TickPrevPtr;
951 
952  OS_TICK_SPOKE *TickSpokePtr; /* Pointer to tick spoke if task is in the tick list */
953 
954  CPU_CHAR *NamePtr; /* Pointer to task name */
955 
956  CPU_STK *StkBasePtr; /* Pointer to base address of stack */
957 
958 #if defined(OS_CFG_TLS_TBL_SIZE) && (OS_CFG_TLS_TBL_SIZE > 0u)
959  OS_TLS TLS_Tbl[OS_CFG_TLS_TBL_SIZE];
960 #endif
961 
962  OS_TASK_PTR TaskEntryAddr; /* Pointer to task entry point address */
963  void *TaskEntryArg; /* Argument passed to task when it was created */
964 
965  OS_PEND_DATA *PendDataTblPtr; /* Pointer to list containing objects pended on */
966  OS_STATE PendOn; /* Indicates what task is pending on */
967  OS_STATUS PendStatus; /* Pend status */
968 
969  OS_STATE TaskState; /* See OS_TASK_STATE_xxx */
970  OS_PRIO Prio; /* Task priority (0 == highest) */
971  CPU_STK_SIZE StkSize; /* Size of task stack (in number of stack elements) */
972  OS_OPT Opt; /* Task options as passed by OSTaskCreate() */
973 
974  OS_OBJ_QTY PendDataTblEntries; /* Size of array of objects to pend on */
975 
976  CPU_TS TS; /* Timestamp */
977 
978  OS_SEM_CTR SemCtr; /* Task specific semaphore counter */
979 
980  /* DELAY / TIMEOUT */
981  OS_TICK TickCtrPrev; /* Previous time when task was ready */
982  OS_TICK TickCtrMatch; /* Absolute time when task is going to be ready */
983  OS_TICK TickRemain; /* Number of ticks remaining for a match (updated at ... */
984  /* ... run-time by OS_StatTask() */
987 
988 #if OS_MSG_EN > 0u
989  void *MsgPtr; /* Message received */
990  OS_MSG_SIZE MsgSize;
991 #endif
992 
993 #if OS_CFG_TASK_Q_EN > 0u
994  OS_MSG_Q MsgQ; /* Message queue associated with task */
995 #if OS_CFG_TASK_PROFILE_EN > 0u
996  CPU_TS MsgQPendTime; /* Time it took for signal to be received */
997  CPU_TS MsgQPendTimeMax; /* Max amount of time it took for signal to be received */
998 #endif
999 #endif
1000 
1001 #if OS_CFG_TASK_REG_TBL_SIZE > 0u
1002  OS_REG RegTbl[OS_CFG_TASK_REG_TBL_SIZE]; /* Task specific registers */
1003 #endif
1004 
1005 #if OS_CFG_FLAG_EN > 0u
1006  OS_FLAGS FlagsPend; /* Event flag(s) to wait on */
1007  OS_FLAGS FlagsRdy; /* Event flags that made task ready to run */
1008  OS_OPT FlagsOpt; /* Options (See OS_OPT_FLAG_xxx) */
1009 #endif
1010 
1011 #if OS_CFG_TASK_SUSPEND_EN > 0u
1012  OS_NESTING_CTR SuspendCtr; /* Nesting counter for OSTaskSuspend() */
1013 #endif
1014 
1015 #if OS_CFG_TASK_PROFILE_EN > 0u
1016  OS_CPU_USAGE CPUUsage; /* CPU Usage of task (0.00-100.00%) */
1017  OS_CPU_USAGE CPUUsageMax; /* CPU Usage of task (0.00-100.00%) - Peak */
1018  OS_CTX_SW_CTR CtxSwCtr; /* Number of time the task was switched in */
1019  CPU_TS CyclesDelta; /* value of OS_TS_GET() - .CyclesStart */
1020  CPU_TS CyclesStart; /* Snapshot of cycle counter at start of task resumption */
1021  OS_CYCLES CyclesTotal; /* Total number of # of cycles the task has been running */
1022  OS_CYCLES CyclesTotalPrev; /* Snapshot of previous # of cycles */
1023 
1024  CPU_TS SemPendTime; /* Time it took for signal to be received */
1025  CPU_TS SemPendTimeMax; /* Max amount of time it took for signal to be received */
1026 #endif
1027 
1028 #if OS_CFG_STAT_TASK_STK_CHK_EN > 0u
1029  CPU_STK_SIZE StkUsed; /* Number of stack elements used from the stack */
1030  CPU_STK_SIZE StkFree; /* Number of stack elements free on the stack */
1031 #endif
1032 
1033 #ifdef CPU_CFG_INT_DIS_MEAS_EN
1034  CPU_TS IntDisTimeMax; /* Maximum interrupt disable time */
1035 #endif
1036 #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u
1037  CPU_TS SchedLockTimeMax; /* Maximum scheduler lock time */
1038 #endif
1039 
1040 #if OS_CFG_DBG_EN > 0u
1041  OS_TCB *DbgPrevPtr;
1042  OS_TCB *DbgNextPtr;
1043  CPU_CHAR *DbgNamePtr;
1044 #endif
1045 };
1046 
1047 /*$PAGE*/
1048 /*
1049 ------------------------------------------------------------------------------------------------------------------------
1050 * TICK DATA TYPE
1051 ------------------------------------------------------------------------------------------------------------------------
1052 */
1053 
1055  OS_TCB *FirstPtr; /* Pointer to list of tasks in tick spoke */
1056  OS_OBJ_QTY NbrEntries; /* Current number of entries in the tick spoke */
1057  OS_OBJ_QTY NbrEntriesMax; /* Peak number of entries in the tick spoke */
1058 };
1059 
1060 
1061 /*
1062 ------------------------------------------------------------------------------------------------------------------------
1063 * TIMER DATA TYPES
1064 ------------------------------------------------------------------------------------------------------------------------
1065 */
1066 
1067 struct os_tmr {
1069  CPU_CHAR *NamePtr; /* Name to give the timer */
1070  OS_TMR_CALLBACK_PTR CallbackPtr; /* Function to call when timer expires */
1071  void *CallbackPtrArg; /* Argument to pass to function when timer expires */
1072  OS_TMR *NextPtr; /* Double link list pointers */
1073  OS_TMR *PrevPtr;
1074  OS_TICK Match; /* Timer expires when OSTmrTickCtr matches this value */
1075  OS_TICK Remain; /* Amount of time remaining before timer expires */
1076  OS_TICK Dly; /* Delay before start of repeat */
1077  OS_TICK Period; /* Period to repeat timer */
1078  OS_OPT Opt; /* Options (see OS_OPT_TMR_xxx) */
1080 #if OS_CFG_DBG_EN > 0u
1081  OS_TMR *DbgPrevPtr;
1082  OS_TMR *DbgNextPtr;
1083 #endif
1084 };
1085 
1086 
1087 
1089  OS_TMR *FirstPtr; /* Pointer to first timer in linked list */
1092 };
1093 
1094 /*$PAGE*/
1095 /*
1096 ************************************************************************************************************************
1097 ************************************************************************************************************************
1098 * G L O B A L V A R I A B L E S
1099 ************************************************************************************************************************
1100 ************************************************************************************************************************
1101 */
1102 
1103 #if OS_CFG_APP_HOOKS_EN > 0u
1104 OS_EXT OS_APP_HOOK_TCB OS_AppTaskCreateHookPtr; /* Application hooks */
1105 OS_EXT OS_APP_HOOK_TCB OS_AppTaskDelHookPtr;
1106 OS_EXT OS_APP_HOOK_TCB OS_AppTaskReturnHookPtr;
1107 
1108 OS_EXT OS_APP_HOOK_VOID OS_AppIdleTaskHookPtr;
1109 OS_EXT OS_APP_HOOK_VOID OS_AppStatTaskHookPtr;
1110 OS_EXT OS_APP_HOOK_VOID OS_AppTaskSwHookPtr;
1111 OS_EXT OS_APP_HOOK_VOID OS_AppTimeTickHookPtr;
1112 #endif
1113 
1114  /* IDLE TASK -------------------------------- */
1117 
1118  /* MISCELLANEOUS ---------------------------- */
1119 OS_EXT OS_NESTING_CTR OSIntNestingCtr; /* Interrupt nesting level */
1120 #ifdef CPU_CFG_INT_DIS_MEAS_EN
1121 OS_EXT CPU_TS OSIntDisTimeMax; /* Overall interrupt disable time */
1122 #endif
1123 
1124 OS_EXT OS_STATE OSRunning; /* Flag indicating that kernel is running */
1125 
1126 
1127  /* ISR HANDLER TASK ------------------------- */
1128 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
1129 OS_EXT OS_INT_Q *OSIntQInPtr;
1130 OS_EXT OS_INT_Q *OSIntQOutPtr;
1131 OS_EXT OS_OBJ_QTY OSIntQNbrEntries;
1132 OS_EXT OS_OBJ_QTY OSIntQNbrEntriesMax;
1133 OS_EXT OS_OBJ_QTY OSIntQOvfCtr;
1134 OS_EXT OS_TCB OSIntQTaskTCB;
1135 OS_EXT CPU_TS OSIntQTaskTimeMax;
1136 #endif
1137 
1138  /* FLAGS ------------------------------------ */
1139 #if OS_CFG_FLAG_EN > 0u
1140 #if OS_CFG_DBG_EN > 0u
1141 OS_EXT OS_FLAG_GRP *OSFlagDbgListPtr;
1142 #endif
1143 OS_EXT OS_OBJ_QTY OSFlagQty;
1144 #endif
1145 
1146  /* MEMORY MANAGEMENT ------------------------ */
1147 #if OS_CFG_MEM_EN > 0u
1148 #if OS_CFG_DBG_EN > 0u
1149 OS_EXT OS_MEM *OSMemDbgListPtr;
1150 #endif
1151 OS_EXT OS_OBJ_QTY OSMemQty; /* Number of memory partitions created */
1152 #endif
1153 
1154  /* OS_MSG POOL ------------------------------ */
1155 #if OS_MSG_EN > 0u
1156 OS_EXT OS_MSG_POOL OSMsgPool; /* Pool of OS_MSG */
1157 #endif
1158 
1159  /* MUTEX MANAGEMENT ------------------------- */
1160 #if OS_CFG_MUTEX_EN > 0u
1161 #if OS_CFG_DBG_EN > 0u
1162 OS_EXT OS_MUTEX *OSMutexDbgListPtr;
1163 #endif
1164 OS_EXT OS_OBJ_QTY OSMutexQty; /* Number of mutexes created */
1165 #endif
1166 
1167  /* PRIORITIES ------------------------------- */
1168 OS_EXT OS_PRIO OSPrioCur; /* Priority of current task */
1169 OS_EXT OS_PRIO OSPrioHighRdy; /* Priority of highest priority task */
1170 OS_EXT OS_PRIO OSPrioSaved; /* Saved priority level when Post Deferred */
1172 
1173  /* QUEUES ----------------------------------- */
1174 #if OS_CFG_Q_EN > 0u
1175 #if OS_CFG_DBG_EN > 0u
1176 OS_EXT OS_Q *OSQDbgListPtr;
1177 #endif
1178 OS_EXT OS_OBJ_QTY OSQQty; /* Number of message queues created */
1179 #endif
1180 
1181 
1182 
1183  /* READY LIST ------------------------------- */
1184 OS_EXT OS_RDY_LIST OSRdyList[OS_CFG_PRIO_MAX]; /* Table of tasks ready to run */
1185 
1186 
1187 #ifdef OS_SAFETY_CRITICAL_IEC61508
1188 OS_EXT CPU_BOOLEAN OSSafetyCriticalStartFlag; /* Flag indicating that all init. done */
1189 #endif
1190  /* SCHEDULER -------------------------------- */
1191 #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u
1192 OS_EXT CPU_TS_TMR OSSchedLockTimeBegin; /* Scheduler lock time measurement */
1193 OS_EXT CPU_TS_TMR OSSchedLockTimeMax;
1194 OS_EXT CPU_TS_TMR OSSchedLockTimeMaxCur;
1195 #endif
1196 
1198 #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
1199 OS_EXT OS_TICK OSSchedRoundRobinDfltTimeQuanta;
1200 OS_EXT CPU_BOOLEAN OSSchedRoundRobinEn; /* Enable/Disable round-robin scheduling */
1201 #endif
1202  /* SEMAPHORES ------------------------------- */
1203 #if OS_CFG_SEM_EN > 0u
1204 #if OS_CFG_DBG_EN > 0u
1205 OS_EXT OS_SEM *OSSemDbgListPtr;
1206 #endif
1207 OS_EXT OS_OBJ_QTY OSSemQty; /* Number of semaphores created */
1208 #endif
1209 
1210  /* STATISTICS ------------------------------- */
1211 #if OS_CFG_STAT_TASK_EN > 0u
1212 OS_EXT CPU_BOOLEAN OSStatResetFlag; /* Force the reset of the computed statistics */
1213 OS_EXT OS_CPU_USAGE OSStatTaskCPUUsage; /* CPU Usage in % */
1214 OS_EXT OS_CPU_USAGE OSStatTaskCPUUsageMax; /* CPU Usage in % (Peak) */
1215 OS_EXT OS_TICK OSStatTaskCtr;
1216 OS_EXT OS_TICK OSStatTaskCtrMax;
1217 OS_EXT OS_TICK OSStatTaskCtrRun;
1218 OS_EXT CPU_BOOLEAN OSStatTaskRdy;
1219 OS_EXT OS_TCB OSStatTaskTCB;
1220 OS_EXT CPU_TS OSStatTaskTimeMax;
1221 #endif
1222 
1223  /* TASKS ------------------------------------ */
1224 OS_EXT OS_CTX_SW_CTR OSTaskCtxSwCtr; /* Number of context switches */
1225 #if OS_CFG_DBG_EN > 0u
1226 OS_EXT OS_TCB *OSTaskDbgListPtr;
1227 #endif
1228 OS_EXT OS_OBJ_QTY OSTaskQty; /* Number of tasks created */
1229 
1230 #if OS_CFG_TASK_REG_TBL_SIZE > 0u
1231 OS_EXT OS_REG_ID OSTaskRegNextAvailID; /* Next available Task Register ID */
1232 #endif
1233 
1234  /* TICK TASK -------------------------------- */
1235 OS_EXT OS_TICK OSTickCtr; /* Cnts the #ticks since startup or last set */
1238 
1239 
1240 #if OS_CFG_TMR_EN > 0u /* TIMERS ----------------------------------- */
1241 #if OS_CFG_DBG_EN > 0u
1242 OS_EXT OS_TMR *OSTmrDbgListPtr;
1243 #endif
1244 OS_EXT OS_OBJ_QTY OSTmrQty; /* Number of timers created */
1245 OS_EXT OS_TCB OSTmrTaskTCB; /* TCB of timer task */
1246 OS_EXT CPU_TS OSTmrTaskTimeMax;
1247 OS_EXT OS_TICK OSTmrTickCtr; /* Current time for the timers */
1248 OS_EXT OS_CTR OSTmrUpdateCnt; /* Counter for updating timers */
1249 OS_EXT OS_CTR OSTmrUpdateCtr;
1250 #endif
1251 
1252  /* TCBs ------------------------------------- */
1253 OS_EXT OS_TCB *OSTCBCurPtr; /* Pointer to currently running TCB */
1254 OS_EXT OS_TCB *OSTCBHighRdyPtr; /* Pointer to highest priority TCB */
1255 
1256 /*$PAGE*/
1257 /*
1258 ************************************************************************************************************************
1259 ************************************************************************************************************************
1260 * E X T E R N A L S
1261 ************************************************************************************************************************
1262 ************************************************************************************************************************
1263 */
1264 
1265 extern CPU_STK * const OSCfg_IdleTaskStkBasePtr;
1267 extern CPU_STK_SIZE const OSCfg_IdleTaskStkSize;
1269 
1270 extern OS_INT_Q * const OSCfg_IntQBasePtr;
1271 extern OS_OBJ_QTY const OSCfg_IntQSize;
1272 extern CPU_INT32U const OSCfg_IntQSizeRAM;
1273 extern CPU_STK * const OSCfg_IntQTaskStkBasePtr;
1275 extern CPU_STK_SIZE const OSCfg_IntQTaskStkSize;
1277 
1278 extern CPU_STK * const OSCfg_ISRStkBasePtr;
1279 extern CPU_STK_SIZE const OSCfg_ISRStkSize;
1280 extern CPU_INT32U const OSCfg_ISRStkSizeRAM;
1281 
1282 extern OS_MSG_SIZE const OSCfg_MsgPoolSize;
1283 extern CPU_INT32U const OSCfg_MsgPoolSizeRAM;
1284 extern OS_MSG * const OSCfg_MsgPoolBasePtr;
1285 
1286 extern OS_PRIO const OSCfg_StatTaskPrio;
1287 extern OS_RATE_HZ const OSCfg_StatTaskRate_Hz;
1288 extern CPU_STK * const OSCfg_StatTaskStkBasePtr;
1290 extern CPU_STK_SIZE const OSCfg_StatTaskStkSize;
1292 
1293 extern CPU_STK_SIZE const OSCfg_StkSizeMin;
1294 
1295 extern OS_RATE_HZ const OSCfg_TickRate_Hz;
1296 extern OS_PRIO const OSCfg_TickTaskPrio;
1297 extern CPU_STK * const OSCfg_TickTaskStkBasePtr;
1299 extern CPU_STK_SIZE const OSCfg_TickTaskStkSize;
1301 extern OS_OBJ_QTY const OSCfg_TickWheelSize;
1302 extern CPU_INT32U const OSCfg_TickWheelSizeRAM;
1303 
1304 extern OS_PRIO const OSCfg_TmrTaskPrio;
1305 extern OS_RATE_HZ const OSCfg_TmrTaskRate_Hz;
1306 extern CPU_STK * const OSCfg_TmrTaskStkBasePtr;
1307 extern CPU_STK_SIZE const OSCfg_TmrTaskStkLimit;
1308 extern CPU_STK_SIZE const OSCfg_TmrTaskStkSize;
1309 extern CPU_INT32U const OSCfg_TmrTaskStkSizeRAM;
1310 extern OS_OBJ_QTY const OSCfg_TmrWheelSize;
1311 extern CPU_INT32U const OSCfg_TmrSizeRAM;
1312 
1313 
1314 extern CPU_STK OSCfg_IdleTaskStk[];
1315 
1316 #if (OS_CFG_ISR_POST_DEFERRED_EN > 0u)
1317 extern CPU_STK OSCfg_IntQTaskStk[];
1318 extern OS_INT_Q OSCfg_IntQ[];
1319 #endif
1320 
1321 extern CPU_STK OSCfg_ISRStk[];
1322 
1323 #if (OS_MSG_EN > 0u)
1324 extern OS_MSG OSCfg_MsgPool[];
1325 #endif
1326 
1327 #if (OS_CFG_STAT_TASK_EN > 0u)
1328 extern CPU_STK OSCfg_StatTaskStk[];
1329 #endif
1330 
1331 extern CPU_STK OSCfg_TickTaskStk[];
1332 extern OS_TICK_SPOKE OSCfg_TickWheel[];
1333 
1334 #if (OS_CFG_TMR_EN > 0u)
1335 extern CPU_STK OSCfg_TmrTaskStk[];
1336 extern OS_TMR_SPOKE OSCfg_TmrWheel[];
1337 #endif
1338 
1339 /*
1340 ************************************************************************************************************************
1341 ************************************************************************************************************************
1342 * F U N C T I O N P R O T O T Y P E S
1343 ************************************************************************************************************************
1344 ************************************************************************************************************************
1345 */
1346 
1347 /* ================================================================================================================== */
1348 /* EVENT FLAGS */
1349 /* ================================================================================================================== */
1350 
1351 #if OS_CFG_FLAG_EN > 0u
1352 
1353 void OSFlagCreate (OS_FLAG_GRP *p_grp,
1354  CPU_CHAR *p_name,
1355  OS_FLAGS flags,
1356  OS_ERR *p_err);
1357 
1358 #if OS_CFG_FLAG_DEL_EN > 0u
1359 OS_OBJ_QTY OSFlagDel (OS_FLAG_GRP *p_grp,
1360  OS_OPT opt,
1361  OS_ERR *p_err);
1362 #endif
1363 
1364 OS_FLAGS OSFlagPend (OS_FLAG_GRP *p_grp,
1365  OS_FLAGS flags,
1366  OS_TICK timeout,
1367  OS_OPT opt,
1368  CPU_TS *p_ts,
1369  OS_ERR *p_err);
1370 
1371 #if OS_CFG_FLAG_PEND_ABORT_EN > 0u
1372 OS_OBJ_QTY OSFlagPendAbort (OS_FLAG_GRP *p_grp,
1373  OS_OPT opt,
1374  OS_ERR *p_err);
1375 #endif
1376 
1377 OS_FLAGS OSFlagPendGetFlagsRdy (OS_ERR *p_err);
1378 
1379 OS_FLAGS OSFlagPost (OS_FLAG_GRP *p_grp,
1380  OS_FLAGS flags,
1381  OS_OPT opt,
1382  OS_ERR *p_err);
1383 
1384 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1385 
1386 void OS_FlagClr (OS_FLAG_GRP *p_grp);
1387 
1388 void OS_FlagBlock (OS_PEND_DATA *p_pend_data,
1389  OS_FLAG_GRP *p_grp,
1390  OS_FLAGS flags,
1391  OS_OPT opt,
1392  OS_TICK timeout);
1393 
1394 #if OS_CFG_DBG_EN > 0u
1395 void OS_FlagDbgListAdd (OS_FLAG_GRP *p_grp);
1396 
1397 void OS_FlagDbgListRemove (OS_FLAG_GRP *p_grp);
1398 #endif
1399 
1400 void OS_FlagInit (OS_ERR *p_err);
1401 
1402 OS_FLAGS OS_FlagPost (OS_FLAG_GRP *p_grp,
1403  OS_FLAGS flags,
1404  OS_OPT opt,
1405  CPU_TS ts,
1406  OS_ERR *p_err);
1407 
1408 void OS_FlagTaskRdy (OS_TCB *p_tcb,
1409  OS_FLAGS flags_rdy,
1410  CPU_TS ts);
1411 #endif
1412 
1413 /*$PAGE*/
1414 /* ================================================================================================================== */
1415 /* FIXED SIZE MEMORY BLOCK MANAGEMENT */
1416 /* ================================================================================================================== */
1417 
1418 #if OS_CFG_MEM_EN > 0u
1419 
1420 void OSMemCreate (OS_MEM *p_mem,
1421  CPU_CHAR *p_name,
1422  void *p_addr,
1423  OS_MEM_QTY n_blks,
1424  OS_MEM_SIZE blk_size,
1425  OS_ERR *p_err);
1426 
1427 void *OSMemGet (OS_MEM *p_mem,
1428  OS_ERR *p_err);
1429 
1430 void OSMemPut (OS_MEM *p_mem,
1431  void *p_blk,
1432  OS_ERR *p_err);
1433 
1434 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1435 
1436 #if OS_CFG_DBG_EN > 0u
1437 void OS_MemDbgListAdd (OS_MEM *p_mem);
1438 #endif
1439 
1440 void OS_MemInit (OS_ERR *p_err);
1441 
1442 #endif
1443 
1444 /*$PAGE*/
1445 /* ================================================================================================================== */
1446 /* MUTUAL EXCLUSION SEMAPHORES */
1447 /* ================================================================================================================== */
1448 
1449 #if OS_CFG_MUTEX_EN > 0u
1450 
1451 void OSMutexCreate (OS_MUTEX *p_mutex,
1452  CPU_CHAR *p_name,
1453  OS_ERR *p_err);
1454 
1455 #if OS_CFG_MUTEX_DEL_EN > 0u
1456 OS_OBJ_QTY OSMutexDel (OS_MUTEX *p_mutex,
1457  OS_OPT opt,
1458  OS_ERR *p_err);
1459 #endif
1460 
1461 void OSMutexPend (OS_MUTEX *p_mutex,
1462  OS_TICK timeout,
1463  OS_OPT opt,
1464  CPU_TS *p_ts,
1465  OS_ERR *p_err);
1466 
1467 #if OS_CFG_MUTEX_PEND_ABORT_EN > 0u
1468 OS_OBJ_QTY OSMutexPendAbort (OS_MUTEX *p_mutex,
1469  OS_OPT opt,
1470  OS_ERR *p_err);
1471 #endif
1472 
1473 void OSMutexPost (OS_MUTEX *p_mutex,
1474  OS_OPT opt,
1475  OS_ERR *p_err);
1476 
1477 
1478 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1479 
1480 void OS_MutexClr (OS_MUTEX *p_mutex);
1481 
1482 #if OS_CFG_DBG_EN > 0u
1483 void OS_MutexDbgListAdd (OS_MUTEX *p_mutex);
1484 
1485 void OS_MutexDbgListRemove (OS_MUTEX *p_mutex);
1486 #endif
1487 
1488 void OS_MutexInit (OS_ERR *p_err);
1489 #endif
1490 
1491 /*$PAGE*/
1492 /* ================================================================================================================== */
1493 /* MESSAGE QUEUES */
1494 /* ================================================================================================================== */
1495 
1496 #if OS_CFG_PEND_MULTI_EN > 0u
1497 
1498 OS_OBJ_QTY OSPendMulti (OS_PEND_DATA *p_pend_data_tbl,
1499  OS_OBJ_QTY tbl_size,
1500  OS_TICK timeout,
1501  OS_OPT opt,
1502  OS_ERR *p_err);
1503 
1504 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1505 
1506 OS_OBJ_QTY OS_PendMultiGetRdy (OS_PEND_DATA *p_pend_data_tbl,
1507  OS_OBJ_QTY tbl_size);
1508 
1509 CPU_BOOLEAN OS_PendMultiValidate (OS_PEND_DATA *p_pend_data_tbl,
1510  OS_OBJ_QTY tbl_size);
1511 
1512 void OS_PendMultiWait (OS_PEND_DATA *p_pend_data_tbl,
1513  OS_OBJ_QTY tbl_size,
1514  OS_TICK timeout);
1515 #endif
1516 
1517 /* ================================================================================================================== */
1518 /* MESSAGE QUEUES */
1519 /* ================================================================================================================== */
1520 
1521 #if OS_CFG_Q_EN > 0u
1522 
1523 void OSQCreate (OS_Q *p_q,
1524  CPU_CHAR *p_name,
1525  OS_MSG_QTY max_qty,
1526  OS_ERR *p_err);
1527 
1528 #if OS_CFG_Q_DEL_EN > 0u
1529 OS_OBJ_QTY OSQDel (OS_Q *p_q,
1530  OS_OPT opt,
1531  OS_ERR *p_err);
1532 #endif
1533 
1534 #if OS_CFG_Q_FLUSH_EN > 0u
1535 OS_MSG_QTY OSQFlush (OS_Q *p_q,
1536  OS_ERR *p_err);
1537 #endif
1538 
1539 void *OSQPend (OS_Q *p_q,
1540  OS_TICK timeout,
1541  OS_OPT opt,
1542  OS_MSG_SIZE *p_msg_size,
1543  CPU_TS *p_ts,
1544  OS_ERR *p_err);
1545 
1546 #if OS_CFG_Q_PEND_ABORT_EN > 0u
1547 OS_OBJ_QTY OSQPendAbort (OS_Q *p_q,
1548  OS_OPT opt,
1549  OS_ERR *p_err);
1550 #endif
1551 
1552 void OSQPost (OS_Q *p_q,
1553  void *p_void,
1554  OS_MSG_SIZE msg_size,
1555  OS_OPT opt,
1556  OS_ERR *p_err);
1557 
1558 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1559 
1560 void OS_QClr (OS_Q *p_q);
1561 
1562 #if OS_CFG_DBG_EN > 0u
1563 void OS_QDbgListAdd (OS_Q *p_q);
1564 
1565 void OS_QDbgListRemove (OS_Q *p_q);
1566 #endif
1567 
1568 void OS_QInit (OS_ERR *p_err);
1569 
1570 void OS_QPost (OS_Q *p_q,
1571  void *p_void,
1572  OS_MSG_SIZE msg_size,
1573  OS_OPT opt,
1574  CPU_TS ts,
1575  OS_ERR *p_err);
1576 #endif
1577 
1578 /*$PAGE*/
1579 /* ================================================================================================================== */
1580 /* SEMAPHORES */
1581 /* ================================================================================================================== */
1582 
1583 #if OS_CFG_SEM_EN > 0u
1584 
1585 void OSSemCreate (OS_SEM *p_sem,
1586  CPU_CHAR *p_name,
1587  OS_SEM_CTR cnt,
1588  OS_ERR *p_err);
1589 
1590 OS_OBJ_QTY OSSemDel (OS_SEM *p_sem,
1591  OS_OPT opt,
1592  OS_ERR *p_err);
1593 
1594 OS_SEM_CTR OSSemPend (OS_SEM *p_sem,
1595  OS_TICK timeout,
1596  OS_OPT opt,
1597  CPU_TS *p_ts,
1598  OS_ERR *p_err);
1599 
1600 #if OS_CFG_SEM_PEND_ABORT_EN > 0u
1601 OS_OBJ_QTY OSSemPendAbort (OS_SEM *p_sem,
1602  OS_OPT opt,
1603  OS_ERR *p_err);
1604 #endif
1605 
1606 OS_SEM_CTR OSSemPost (OS_SEM *p_sem,
1607  OS_OPT opt,
1608  OS_ERR *p_err);
1609 
1610 #if OS_CFG_SEM_SET_EN > 0u
1611 void OSSemSet (OS_SEM *p_sem,
1612  OS_SEM_CTR cnt,
1613  OS_ERR *p_err);
1614 #endif
1615 
1616 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1617 
1618 void OS_SemClr (OS_SEM *p_sem);
1619 
1620 #if OS_CFG_DBG_EN > 0u
1621 void OS_SemDbgListAdd (OS_SEM *p_sem);
1622 
1623 void OS_SemDbgListRemove (OS_SEM *p_sem);
1624 #endif
1625 
1626 void OS_SemInit (OS_ERR *p_err);
1627 
1628 OS_SEM_CTR OS_SemPost (OS_SEM *p_sem,
1629  OS_OPT opt,
1630  CPU_TS ts,
1631  OS_ERR *p_err);
1632 #endif
1633 
1634 /*$PAGE*/
1635 /* ================================================================================================================== */
1636 /* TASK MANAGEMENT */
1637 /* ================================================================================================================== */
1638 
1639 #if OS_CFG_TASK_CHANGE_PRIO_EN > 0u
1640 void OSTaskChangePrio (OS_TCB *p_tcb,
1641  OS_PRIO prio_new,
1642  OS_ERR *p_err);
1643 #endif
1644 
1645 void OSTaskCreate (OS_TCB *p_tcb,
1646  CPU_CHAR *p_name,
1647  OS_TASK_PTR p_task,
1648  void *p_arg,
1649  OS_PRIO prio,
1650  CPU_STK *p_stk_base,
1651  CPU_STK_SIZE stk_limit,
1652  CPU_STK_SIZE stk_size,
1653  OS_MSG_QTY q_size,
1654  OS_TICK time_quanta,
1655  void *p_ext,
1656  OS_OPT opt,
1657  OS_ERR *p_err);
1658 
1659 #if OS_CFG_TASK_DEL_EN > 0u
1660 void OSTaskDel (OS_TCB *p_tcb,
1661  OS_ERR *p_err);
1662 #endif
1663 
1664 #if OS_CFG_TASK_Q_EN > 0u
1665 OS_MSG_QTY OSTaskQFlush (OS_TCB *p_tcb,
1666  OS_ERR *p_err);
1667 
1668 void *OSTaskQPend (OS_TICK timeout,
1669  OS_OPT opt,
1670  OS_MSG_SIZE *p_msg_size,
1671  CPU_TS *p_ts,
1672  OS_ERR *p_err);
1673 
1674 CPU_BOOLEAN OSTaskQPendAbort (OS_TCB *p_tcb,
1675  OS_OPT opt,
1676  OS_ERR *p_err);
1677 
1678 void OSTaskQPost (OS_TCB *p_tcb,
1679  void *p_void,
1680  OS_MSG_SIZE msg_size,
1681  OS_OPT opt,
1682  OS_ERR *p_err);
1683 
1684 #endif
1685 
1686 #if OS_CFG_TASK_REG_TBL_SIZE > 0u
1687 OS_REG OSTaskRegGet (OS_TCB *p_tcb,
1688  OS_REG_ID id,
1689  OS_ERR *p_err);
1690 
1691 OS_REG_ID OSTaskRegGetID (OS_ERR *p_err);
1692 
1693 void OSTaskRegSet (OS_TCB *p_tcb,
1694  OS_REG_ID id,
1695  OS_REG value,
1696  OS_ERR *p_err);
1697 #endif
1698 
1699 #if OS_CFG_TASK_SUSPEND_EN > 0u
1700 void OSTaskResume (OS_TCB *p_tcb,
1701  OS_ERR *p_err);
1702 
1703 void OSTaskSuspend (OS_TCB *p_tcb,
1704  OS_ERR *p_err);
1705 #endif
1706 
1708  OS_OPT opt,
1709  CPU_TS *p_ts,
1710  OS_ERR *p_err);
1711 
1712 #if (OS_CFG_TASK_SEM_PEND_ABORT_EN > 0u)
1713 CPU_BOOLEAN OSTaskSemPendAbort (OS_TCB *p_tcb,
1714  OS_OPT opt,
1715  OS_ERR *p_err);
1716 #endif
1717 
1718 OS_SEM_CTR OSTaskSemPost (OS_TCB *p_tcb,
1719  OS_OPT opt,
1720  OS_ERR *p_err);
1721 
1722 OS_SEM_CTR OSTaskSemSet (OS_TCB *p_tcb,
1723  OS_SEM_CTR cnt,
1724  OS_ERR *p_err);
1725 
1726 #if OS_CFG_STAT_TASK_STK_CHK_EN > 0u
1727 void OSTaskStkChk (OS_TCB *p_tcb,
1728  CPU_STK_SIZE *p_free,
1729  CPU_STK_SIZE *p_used,
1730  OS_ERR *p_err);
1731 #endif
1732 
1733 #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
1734 void OSTaskTimeQuantaSet (OS_TCB *p_tcb,
1735  OS_TICK time_quanta,
1736  OS_ERR *p_err);
1737 #endif
1738 
1739 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1740 
1741 void OS_TaskBlock (OS_TCB *p_tcb,
1742  OS_TICK timeout);
1743 
1744 #if OS_CFG_DBG_EN > 0u
1745 void OS_TaskDbgListAdd (OS_TCB *p_tcb);
1746 
1747 void OS_TaskDbgListRemove (OS_TCB *p_tcb);
1748 #endif
1749 
1750 void OS_TaskInit (OS_ERR *p_err);
1751 
1752 void OS_TaskInitTCB (OS_TCB *p_tcb);
1753 
1754 void OS_TaskQPost (OS_TCB *p_tcb,
1755  void *p_void,
1756  OS_MSG_SIZE msg_size,
1757  OS_OPT opt,
1758  CPU_TS ts,
1759  OS_ERR *p_err);
1760 
1761 void OS_TaskRdy (OS_TCB *p_tcb);
1762 
1763 #if OS_CFG_TASK_SUSPEND_EN > 0u
1764 void OS_TaskResume (OS_TCB *p_tcb,
1765  OS_ERR *p_err);
1766 #endif
1767 
1768 void OS_TaskReturn (void);
1769 
1770 OS_SEM_CTR OS_TaskSemPost (OS_TCB *p_tcb,
1771  OS_OPT opt,
1772  CPU_TS ts,
1773  OS_ERR *p_err);
1774 
1775 #if OS_CFG_TASK_SUSPEND_EN > 0u
1776 void OS_TaskSuspend (OS_TCB *p_tcb,
1777  OS_ERR *p_err);
1778 #endif
1779 
1780 /*$PAGE*/
1781 /* ================================================================================================================== */
1782 /* TASK LOCAL STORAGE (TLS) SUPPORT */
1783 /* ================================================================================================================== */
1784 
1785 #if defined(OS_CFG_TLS_TBL_SIZE) && (OS_CFG_TLS_TBL_SIZE > 0u)
1786 OS_TLS_ID OS_TLS_GetID (OS_ERR *p_err);
1787 
1788 OS_TLS OS_TLS_GetValue (OS_TCB *p_tcb,
1789  OS_TLS_ID id,
1790  OS_ERR *p_err);
1791 
1792 void OS_TLS_Init (OS_ERR *p_err);
1793 
1794 void OS_TLS_SetValue (OS_TCB *p_tcb,
1795  OS_TLS_ID id,
1796  OS_TLS value,
1797  OS_ERR *p_err);
1798 
1799 void OS_TLS_SetDestruct (OS_TLS_ID id,
1800  OS_TLS_DESTRUCT_PTR p_destruct,
1801  OS_ERR *p_err);
1802 
1803 void OS_TLS_TaskCreate (OS_TCB *p_tcb);
1804 
1805 void OS_TLS_TaskDel (OS_TCB *p_tcb);
1806 
1807 void OS_TLS_TaskSw (void);
1808 #endif
1809 
1810 /*$PAGE*/
1811 /* ================================================================================================================== */
1812 /* TIME MANAGEMENT */
1813 /* ================================================================================================================== */
1814 
1815 void OSTimeDly (OS_TICK dly,
1816  OS_OPT opt,
1817  OS_ERR *p_err);
1818 
1819 #if OS_CFG_TIME_DLY_HMSM_EN > 0u
1820 void OSTimeDlyHMSM (CPU_INT16U hours,
1821  CPU_INT16U minutes,
1822  CPU_INT16U seconds,
1823  CPU_INT32U milli,
1824  OS_OPT opt,
1825  OS_ERR *p_err);
1826 #endif
1827 
1828 #if OS_CFG_TIME_DLY_RESUME_EN > 0u
1829 void OSTimeDlyResume (OS_TCB *p_tcb,
1830  OS_ERR *p_err);
1831 #endif
1832 
1833 OS_TICK OSTimeGet (OS_ERR *p_err);
1834 
1835 void OSTimeSet (OS_TICK ticks,
1836  OS_ERR *p_err);
1837 
1838 void OSTimeTick (void);
1839 
1840 /*$PAGE*/
1841 /* ================================================================================================================== */
1842 /* TIMER MANAGEMENT */
1843 /* ================================================================================================================== */
1844 
1845 #if OS_CFG_TMR_EN > 0u
1846 void OSTmrCreate (OS_TMR *p_tmr,
1847  CPU_CHAR *p_name,
1848  OS_TICK dly,
1849  OS_TICK period,
1850  OS_OPT opt,
1851  OS_TMR_CALLBACK_PTR p_callback,
1852  void *p_callback_arg,
1853  OS_ERR *p_err);
1854 
1855 CPU_BOOLEAN OSTmrDel (OS_TMR *p_tmr,
1856  OS_ERR *p_err);
1857 
1858 OS_TICK OSTmrRemainGet (OS_TMR *p_tmr,
1859  OS_ERR *p_err);
1860 
1861 CPU_BOOLEAN OSTmrStart (OS_TMR *p_tmr,
1862  OS_ERR *p_err);
1863 
1864 OS_STATE OSTmrStateGet (OS_TMR *p_tmr,
1865  OS_ERR *p_err);
1866 
1867 CPU_BOOLEAN OSTmrStop (OS_TMR *p_tmr,
1868  OS_OPT opt,
1869  void *p_callback_arg,
1870  OS_ERR *p_err);
1871 
1872 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1873 
1874 void OS_TmrClr (OS_TMR *p_tmr);
1875 
1876 #if OS_CFG_DBG_EN > 0u
1877 void OS_TmrDbgListAdd (OS_TMR *p_tmr);
1878 
1879 void OS_TmrDbgListRemove (OS_TMR *p_tmr);
1880 #endif
1881 
1882 void OS_TmrInit (OS_ERR *p_err);
1883 
1884 void OS_TmrLink (OS_TMR *p_tmr,
1885  OS_OPT opt);
1886 
1887 void OS_TmrResetPeak (void);
1888 
1889 void OS_TmrUnlink (OS_TMR *p_tmr);
1890 
1891 void OS_TmrTask (void *p_arg);
1892 
1893 #endif
1894 
1895 /*$PAGE*/
1896 /* ================================================================================================================== */
1897 /* MISCELLANEOUS */
1898 /* ================================================================================================================== */
1899 
1900 void OSInit (OS_ERR *p_err);
1901 
1902 void OSIntEnter (void);
1903 void OSIntExit (void);
1904 
1905 #ifdef OS_SAFETY_CRITICAL_IEC61508
1906 void OSSafetyCriticalStart (void);
1907 #endif
1908 
1909 #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
1910 void OSSchedRoundRobinCfg (CPU_BOOLEAN en,
1911  OS_TICK dflt_time_quanta,
1912  OS_ERR *p_err);
1913 
1914 void OSSchedRoundRobinYield (OS_ERR *p_err);
1915 
1916 #endif
1917 
1918 void OSSched (void);
1919 
1920 void OSSchedLock (OS_ERR *p_err);
1921 void OSSchedUnlock (OS_ERR *p_err);
1922 
1923 void OSStart (OS_ERR *p_err);
1924 
1925 #if OS_CFG_STAT_TASK_EN > 0u
1926 void OSStatReset (OS_ERR *p_err);
1927 
1928 void OSStatTaskCPUUsageInit (OS_ERR *p_err);
1929 #endif
1930 
1931 CPU_INT16U OSVersion (OS_ERR *p_err);
1932 
1933 /* ------------------------------------------------ INTERNAL FUNCTIONS ---------------------------------------------- */
1934 
1935 void OS_IdleTask (void *p_arg);
1936 
1937 void OS_IdleTaskInit (OS_ERR *p_err);
1938 
1939 #if OS_CFG_STAT_TASK_EN > 0u
1940 void OS_StatTask (void *p_arg);
1941 #endif
1942 
1943 void OS_StatTaskInit (OS_ERR *p_err);
1944 
1945 void OS_TickTask (void *p_arg);
1946 void OS_TickTaskInit (OS_ERR *p_err);
1947 
1948 /*$PAGE*/
1949 /*
1950 ************************************************************************************************************************
1951 ************************************************************************************************************************
1952 * T A R G E T S P E C I F I C F U N C T I O N S
1953 ************************************************************************************************************************
1954 ************************************************************************************************************************
1955 */
1956 
1957 void OSInitHook (void);
1958 
1959 void OSTaskCreateHook (OS_TCB *p_tcb);
1960 void OSTaskDelHook (OS_TCB *p_tcb);
1961 
1962 void OSIdleTaskHook (void);
1963 
1964 void OSTaskReturnHook (OS_TCB *p_tcb);
1965 
1966 void OSStatTaskHook (void);
1967 
1969  void *p_arg,
1970  CPU_STK *p_stk_base,
1971  CPU_STK *p_stk_limit,
1972  CPU_STK_SIZE stk_size,
1973  OS_OPT opt);
1974 
1975 void OSTaskSwHook (void);
1976 
1977 void OSTimeTickHook (void);
1978 
1979 /*$PAGE*/
1980 /*
1981 ************************************************************************************************************************
1982 ************************************************************************************************************************
1983 * u C / O S - I I I I N T E R N A L F U N C T I O N P R O T O T Y P E S
1984 ************************************************************************************************************************
1985 ************************************************************************************************************************
1986 */
1987 
1988 void OSCfg_Init (void);
1989 
1990 #if OS_CFG_DBG_EN > 0u
1991 void OS_Dbg_Init (void);
1992 #endif
1993 
1994 
1995 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
1996 void OS_IntQTaskInit (OS_ERR *p_err);
1997 
1998 void OS_IntQPost (OS_OBJ_TYPE type,
1999  void *p_obj,
2000  void *p_void,
2001  OS_MSG_SIZE msg_size,
2002  OS_FLAGS flags,
2003  OS_OPT opt,
2004  CPU_TS ts,
2005  OS_ERR *p_err);
2006 
2007 void OS_IntQRePost (void);
2008 
2009 void OS_IntQTask (void *p_arg);
2010 #endif
2011 
2012 /* ----------------------------------------------- MESSAGE MANAGEMENT ----------------------------------------------- */
2013 
2014 void OS_MsgPoolCreate (OS_MSG *p_msg,
2015  OS_MSG_QTY size);
2016 
2017 void OS_MsgPoolInit (OS_ERR *p_err);
2018 
2019 OS_MSG_QTY OS_MsgQFreeAll (OS_MSG_Q *p_msg_q);
2020 
2021 void *OS_MsgQGet (OS_MSG_Q *p_msg_q,
2022  OS_MSG_SIZE *p_msg_size,
2023  CPU_TS *p_ts,
2024  OS_ERR *p_err);
2025 
2026 void OS_MsgQInit (OS_MSG_Q *p_msg_q,
2027  OS_MSG_QTY size);
2028 
2029 void OS_MsgQPut (OS_MSG_Q *p_msg_q,
2030  void *p_void,
2031  OS_MSG_SIZE msg_size,
2032  OS_OPT opt,
2033  CPU_TS ts,
2034  OS_ERR *p_err);
2035 
2036 /* ---------------------------------------------- PEND/POST MANAGEMENT ---------------------------------------------- */
2037 
2038 void OS_Pend (OS_PEND_DATA *p_pend_data,
2039  OS_PEND_OBJ *p_obj,
2040  OS_STATE pending_on,
2041  OS_TICK timeout);
2042 
2043 void OS_PendAbort (OS_PEND_OBJ *p_obj,
2044  OS_TCB *p_tcb,
2045  CPU_TS ts);
2046 
2047 void OS_PendAbort1 (OS_PEND_OBJ *p_obj,
2048  OS_TCB *p_tcb,
2049  CPU_TS ts);
2050 
2051 void OS_PendObjDel (OS_PEND_OBJ *p_obj,
2052  OS_TCB *p_tcb,
2053  CPU_TS ts);
2054 
2055 void OS_PendObjDel1 (OS_PEND_OBJ *p_obj,
2056  OS_TCB *p_tcb,
2057  CPU_TS ts);
2058 
2059 void OS_Post (OS_PEND_OBJ *p_obj,
2060  OS_TCB *p_tcb,
2061  void *p_void,
2062  OS_MSG_SIZE msg_size,
2063  CPU_TS ts);
2064 
2065 void OS_Post1 (OS_PEND_OBJ *p_obj,
2066  OS_TCB *p_tcb,
2067  void *p_void,
2068  OS_MSG_SIZE msg_size,
2069  CPU_TS ts);
2070 
2071 /* ----------------------------------------------- PRIORITY MANAGEMENT ---------------------------------------------- */
2072 
2073 void OS_PrioInit (void);
2074 
2075 void OS_PrioInsert (OS_PRIO prio);
2076 
2077 void OS_PrioRemove (OS_PRIO prio);
2078 
2079 OS_PRIO OS_PrioGetHighest (void);
2080 
2081 /* --------------------------------------------------- SCHEDULING --------------------------------------------------- */
2082 
2083 #if OS_CFG_ISR_POST_DEFERRED_EN > 0u
2084 void OS_Sched0 (void);
2085 #endif
2086 
2087 #if OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u
2088 void OS_SchedLockTimeMeasStart (void);
2089 void OS_SchedLockTimeMeasStop (void);
2090 #endif
2091 
2092 #if OS_CFG_SCHED_ROUND_ROBIN_EN > 0u
2093 void OS_SchedRoundRobin (OS_RDY_LIST *p_rdy_list);
2094 #endif
2095 
2096 /* --------------------------------------------- READY LIST MANAGEMENT ---------------------------------------------- */
2097 
2098 void OS_RdyListInit (void);
2099 
2100 void OS_RdyListInsert (OS_TCB *p_tcb);
2101 
2102 void OS_RdyListInsertHead (OS_TCB *p_tcb);
2103 
2104 void OS_RdyListInsertTail (OS_TCB *p_tcb);
2105 
2106 void OS_RdyListMoveHeadToTail (OS_RDY_LIST *p_rdy_list);
2107 
2108 void OS_RdyListRemove (OS_TCB *p_tcb);
2109 
2110 /* ---------------------------------------------- PEND LIST MANAGEMENT ---------------------------------------------- */
2111 
2112 void OS_PendDataInit (OS_TCB *p_tcb,
2113  OS_PEND_DATA *p_pend_data_tbl,
2114  OS_OBJ_QTY tbl_size);
2115 
2116 #if OS_CFG_DBG_EN > 0u
2117 void OS_PendDbgNameAdd (OS_PEND_OBJ *p_obj,
2118  OS_TCB *p_tcb);
2119 
2120 void OS_PendDbgNameRemove (OS_PEND_OBJ *p_obj,
2121  OS_TCB *p_tcb);
2122 #endif
2123 
2124 OS_PEND_LIST *OS_PendListGetPtr (OS_PEND_OBJ *p_obj);
2125 
2126 void OS_PendListInit (OS_PEND_LIST *p_pend_list);
2127 
2128 void OS_PendListInsertHead (OS_PEND_LIST *p_pend_list,
2129  OS_PEND_DATA *p_pend_data);
2130 
2131 void OS_PendListInsertPrio (OS_PEND_LIST *p_pend_list,
2132  OS_PEND_DATA *p_pend_data);
2133 
2134 void OS_PendListChangePrio (OS_TCB *p_tcb,
2135  OS_PRIO prio_new);
2136 
2137 void OS_PendListRemove (OS_TCB *p_tcb);
2138 
2139 void OS_PendListRemove1 (OS_PEND_LIST *p_pend_list,
2140  OS_PEND_DATA *p_pend_data);
2141 
2142 /* ---------------------------------------------- TICK LIST MANAGEMENT ---------------------------------------------- */
2143 
2144 void OS_TickListInit (void);
2145 
2146 void OS_TickListInsert (OS_TCB *p_tcb,
2147  OS_TICK time,
2148  OS_OPT opt,
2149  OS_ERR *p_err);
2150 
2151 void OS_TickListRemove (OS_TCB *p_tcb);
2152 
2153 void OS_TickListResetPeak (void);
2154 
2155 void OS_TickListUpdate (void);
2156 
2157 /*$PAGE*/
2158 /*
2159 ************************************************************************************************************************
2160 * LOOK FOR MISSING #define CONSTANTS
2161 *
2162 * This section is used to generate ERROR messages at compile time if certain #define constants are
2163 * MISSING in OS_CFG.H. This allows you to quickly determine the source of the error.
2164 *
2165 * You SHOULD NOT change this section UNLESS you would like to add more comments as to the source of the
2166 * compile time error.
2167 ************************************************************************************************************************
2168 */
2169 
2170 /*
2171 ************************************************************************************************************************
2172 * MISCELLANEOUS
2173 ************************************************************************************************************************
2174 */
2175 
2176 #ifndef OS_CFG_APP_HOOKS_EN
2177 #error "OS_CFG.H, Missing OS_CFG_APP_HOOKS_EN: Enable (1) or Disable (0) application specific hook functions"
2178 #endif
2179 
2180 
2181 #ifndef OS_CFG_ARG_CHK_EN
2182 #error "OS_CFG.H, Missing OS_CFG_ARG_CHK_EN: Enable (1) or Disable (0) argument checking"
2183 #endif
2184 
2185 
2186 #ifndef OS_CFG_DBG_EN
2187 #error "OS_CFG.H, Missing OS_CFG_DBG_EN: Allows you to include variables for debugging or not"
2188 #endif
2189 
2190 
2191 #ifndef OS_CFG_CALLED_FROM_ISR_CHK_EN
2192 #error "OS_CFG.H, Missing OS_CFG_CALLED_FROM_ISR_CHK_EN: Enable (1) or Disable (0) checking whether in an ISR in kernel services"
2193 #endif
2194 
2195 
2196 #ifndef OS_CFG_OBJ_TYPE_CHK_EN
2197 #error "OS_CFG.H, Missing OS_CFG_OBJ_TYPE_CHK_EN: Enable (1) or Disable (0) checking for proper object types in kernel services"
2198 #endif
2199 
2200 
2201 #ifndef OS_CFG_PEND_MULTI_EN
2202 #error "OS_CFG.H, Missing OS_CFG_PEND_MULTI_EN: Enable (1) or Disable (0) multi-pend feature"
2203 #endif
2204 
2205 
2206 #if OS_CFG_PRIO_MAX < 8u
2207 #error "OS_CFG.H, OS_CFG_PRIO_MAX must be >= 8"
2208 #endif
2209 
2210 
2211 #ifndef OS_CFG_SCHED_LOCK_TIME_MEAS_EN
2212 #error "OS_CFG.H, Missing OS_CFG_SCHED_LOCK_TIME_MEAS_EN: Include code to measure scheduler lock time"
2213 #else
2214  #if (OS_CFG_SCHED_LOCK_TIME_MEAS_EN > 0u) && \
2215  (OS_CFG_TS_EN < 1u)
2216  #error "OS_CFG.H, OS_CFG_TS_EN must be Enabled (1) to measure scheduler lock time"
2217  #endif
2218 #endif
2219 
2220 
2221 #ifndef OS_CFG_SCHED_ROUND_ROBIN_EN
2222 #error "OS_CFG.H, Missing OS_CFG_SCHED_ROUND_ROBIN_EN: Include code for Round Robin Scheduling"
2223 #endif
2224 
2225 
2226 #ifndef OS_CFG_STK_SIZE_MIN
2227 #error "OS_CFG.H, Missing OS_CFG_STK_SIZE_MIN: Determines the minimum size for a task stack"
2228 #endif
2229 
2230 #ifndef OS_CFG_TS_EN
2231 #error "OS_CFG.H, Missing OS_CFG_TS_EN: Determines whether time stamping is enabled"
2232 #else
2233  #if (OS_CFG_TS_EN > 0u) && \
2234  (CPU_CFG_TS_EN == DEF_DISABLED)
2235  #error "CPU_CFG.H, CPU_CFG_TS_32_EN must be Enabled (1) to use time stamp feature"
2236  #endif
2237 #endif
2238 
2239 /*
2240 ************************************************************************************************************************
2241 * EVENT FLAGS
2242 ************************************************************************************************************************
2243 */
2244 
2245 #ifndef OS_CFG_FLAG_EN
2246 #error "OS_CFG.H, Missing OS_CFG_FLAG_EN: Enable (1) or Disable (0) code generation for Event Flags"
2247 #else
2248  #ifndef OS_CFG_FLAG_DEL_EN
2249  #error "OS_CFG.H, Missing OS_CFG_FLAG_DEL_EN: Include code for OSFlagDel()"
2250  #endif
2251 
2252  #ifndef OS_CFG_FLAG_MODE_CLR_EN
2253  #error "OS_CFG.H, Missing OS_CFG_FLAG_MODE_CLR_EN: Include code for Wait on Clear EVENT FLAGS"
2254  #endif
2255 
2256  #ifndef OS_CFG_FLAG_PEND_ABORT_EN
2257  #error "OS_CFG.H, Missing OS_CFG_FLAG_PEND_ABORT_EN: Include code for aborting pends from another task"
2258  #endif
2259 #endif
2260 
2261 /*
2262 ************************************************************************************************************************
2263 * MEMORY MANAGEMENT
2264 ************************************************************************************************************************
2265 */
2266 
2267 #ifndef OS_CFG_MEM_EN
2268 #error "OS_CFG.H, Missing OS_CFG_MEM_EN: Enable (1) or Disable (0) code generation for MEMORY MANAGER"
2269 #endif
2270 
2271 /*
2272 ************************************************************************************************************************
2273 * MUTUAL EXCLUSION SEMAPHORES
2274 ************************************************************************************************************************
2275 */
2276 
2277 #ifndef OS_CFG_MUTEX_EN
2278 #error "OS_CFG.H, Missing OS_CFG_MUTEX_EN: Enable (1) or Disable (0) code generation for MUTEX"
2279 #else
2280  #ifndef OS_CFG_MUTEX_DEL_EN
2281  #error "OS_CFG.H, Missing OS_CFG_MUTEX_DEL_EN: Include code for OSMutexDel()"
2282  #endif
2283 
2284  #ifndef OS_CFG_MUTEX_PEND_ABORT_EN
2285  #error "OS_CFG.H, Missing OS_CFG_MUTEX_PEND_ABORT_EN: Include code for OSMutexPendAbort()"
2286  #endif
2287 #endif
2288 
2289 /*
2290 ************************************************************************************************************************
2291 * MESSAGE QUEUES
2292 ************************************************************************************************************************
2293 */
2294 
2295 #ifndef OS_CFG_Q_EN
2296 #error "OS_CFG.H, Missing OS_CFG_Q_EN: Enable (1) or Disable (0) code generation for QUEUES"
2297 #else
2298  #ifndef OS_CFG_Q_DEL_EN
2299  #error "OS_CFG.H, Missing OS_CFG_Q_DEL_EN: Include code for OSQDel()"
2300  #endif
2301 
2302  #ifndef OS_CFG_Q_FLUSH_EN
2303  #error "OS_CFG.H, Missing OS_CFG_Q_FLUSH_EN: Include code for OSQFlush()"
2304  #endif
2305 
2306  #ifndef OS_CFG_Q_PEND_ABORT_EN
2307  #error "OS_CFG.H, Missing OS_CFG_Q_PEND_ABORT_EN: Include code for OSQPendAbort()"
2308  #endif
2309 #endif
2310 
2311 /*
2312 ************************************************************************************************************************
2313 * SEMAPHORES
2314 ************************************************************************************************************************
2315 */
2316 
2317 #ifndef OS_CFG_SEM_EN
2318 #error "OS_CFG.H, Missing OS_CFG_SEM_EN: Enable (1) or Disable (0) code generation for SEMAPHORES"
2319 #else
2320  #ifndef OS_CFG_SEM_DEL_EN
2321  #error "OS_CFG.H, Missing OS_CFG_SEM_DEL_EN: Include code for OSSemDel()"
2322  #endif
2323 
2324  #ifndef OS_CFG_SEM_PEND_ABORT_EN
2325  #error "OS_CFG.H, Missing OS_CFG_SEM_PEND_ABORT_EN: Include code for OSSemPendAbort()"
2326  #endif
2327 
2328  #ifndef OS_CFG_SEM_SET_EN
2329  #error "OS_CFG.H, Missing OS_CFG_SEM_SET_EN: Include code for OSSemSet()"
2330  #endif
2331 #endif
2332 
2333 /*
2334 ************************************************************************************************************************
2335 * TASK MANAGEMENT
2336 ************************************************************************************************************************
2337 */
2338 
2339 #ifndef OS_CFG_STAT_TASK_EN
2340 #error "OS_CFG.H, Missing OS_CFG_STAT_TASK_EN: Enable (1) or Disable(0) the statistics task"
2341 #endif
2342 
2343 #ifndef OS_CFG_STAT_TASK_STK_CHK_EN
2344 #error "OS_CFG.H, Missing OS_CFG_STAT_TASK_STK_CHK_EN: Check task stacks from statistics task"
2345 #endif
2346 
2347 #ifndef OS_CFG_TASK_CHANGE_PRIO_EN
2348 #error "OS_CFG.H, Missing OS_CFG_TASK_CHANGE_PRIO_EN: Include code for OSTaskChangePrio()"
2349 #endif
2350 
2351 #ifndef OS_CFG_TASK_DEL_EN
2352 #error "OS_CFG.H, Missing OS_CFG_TASK_DEL_EN: Include code for OSTaskDel()"
2353 #endif
2354 
2355 #ifndef OS_CFG_TASK_Q_EN
2356 #error "OS_CFG.H, Missing OS_CFG_TASK_Q_EN: Include code for OSTaskQxxx()"
2357 #endif
2358 
2359 #ifndef OS_CFG_TASK_Q_PEND_ABORT_EN
2360 #error "OS_CFG.H, Missing OS_CFG_TASK_Q_PEND_ABORT_EN: Include code for OSTaskQPendAbort()"
2361 #endif
2362 
2363 #ifndef OS_CFG_TASK_PROFILE_EN
2364 #error "OS_CFG.H, Missing OS_CFG_TASK_PROFILE_EN: Include code for task profiling"
2365 #endif
2366 
2367 #ifndef OS_CFG_TASK_REG_TBL_SIZE
2368 #error "OS_CFG.H, Missing OS_CFG_TASK_REG_TBL_SIZE: Include support for task specific registers"
2369 #endif
2370 
2371 #ifndef OS_CFG_TASK_SEM_PEND_ABORT_EN
2372 #error "OS_CFG.H, Missing OS_CFG_TASK_SEM_PEND_ABORT_EN: Include code for OSTaskSemPendAbort()"
2373 #endif
2374 
2375 #ifndef OS_CFG_TASK_SUSPEND_EN
2376 #error "OS_CFG.H, Missing OS_CFG_TASK_SUSPEND_EN: Include code for OSTaskSuspend() and OSTaskResume()"
2377 #endif
2378 
2379 /*
2380 ************************************************************************************************************************
2381 * TIME MANAGEMENT
2382 ************************************************************************************************************************
2383 */
2384 
2385 #ifndef OS_CFG_TIME_DLY_HMSM_EN
2386 #error "OS_CFG.H, Missing OS_CFG_TIME_DLY_HMSM_EN: Include code for OSTimeDlyHMSM()"
2387 #endif
2388 
2389 #ifndef OS_CFG_TIME_DLY_RESUME_EN
2390 #error "OS_CFG.H, Missing OS_CFG_TIME_DLY_RESUME_EN: Include code for OSTimeDlyResume()"
2391 #endif
2392 
2393 /*
2394 ************************************************************************************************************************
2395 * TIMER MANAGEMENT
2396 ************************************************************************************************************************
2397 */
2398 
2399 #ifndef OS_CFG_TMR_EN
2400 #error "OS_CFG.H, Missing OS_CFG_TMR_EN: When (1) enables code generation for Timer Management"
2401 #else
2402  #ifndef OS_CFG_TMR_DEL_EN
2403  #error "OS_CFG.H, Missing OS_CFG_TMR_DEL_EN: Enables (1) or Disables (0) code for OSTmrDel()"
2404  #endif
2405 #endif
2406 
2407 /*
2408 ************************************************************************************************************************
2409 * LIBRARY CONFIGURATION ERRORS
2410 ************************************************************************************************************************
2411 */
2412 
2413  /* See 'os.h Note #1a'. */
2414 #if LIB_VERSION < 126u
2415 #error "lib_def.h, LIB_VERSION SHOULD be >= V1.26"
2416 #endif
2417 
2418 
2419  /* See 'os.h Note #1b'. */
2420 #if CPU_CORE_VERSION < 125u
2421 #error "cpu_core.h, CPU_CORE_VERSION SHOULD be >= V1.25"
2422 #endif
2423 
2424 
2425 /*
2426 ************************************************************************************************************************
2427 * uC/OS-III MODULE END
2428 ************************************************************************************************************************
2429 */
2430 
2431 #ifdef __cplusplus
2432 }
2433 #endif
2434 #endif