1 |
471 |
julius |
/*
|
2 |
|
|
*********************************************************************************************************
|
3 |
|
|
* uC/OS-II
|
4 |
|
|
* The Real-Time Kernel
|
5 |
|
|
*
|
6 |
|
|
* (c) Copyright 1992-2009, Micrium, Weston, FL
|
7 |
|
|
* All Rights Reserved
|
8 |
|
|
*
|
9 |
|
|
* File : uCOS_II.H
|
10 |
|
|
* By : Jean J. Labrosse
|
11 |
|
|
* Version : V2.91
|
12 |
|
|
*
|
13 |
|
|
* LICENSING TERMS:
|
14 |
|
|
* ---------------
|
15 |
|
|
* uC/OS-II is provided in source form for FREE evaluation, for educational use or for peaceful research.
|
16 |
|
|
* If you plan on using uC/OS-II in a commercial product you need to contact Micriµm to properly license
|
17 |
|
|
* its use in your product. We provide ALL the source code for your convenience and to help you experience
|
18 |
|
|
* uC/OS-II. The fact that the source is provided does NOT mean that you can use it without paying a
|
19 |
|
|
* licensing fee.
|
20 |
|
|
*********************************************************************************************************
|
21 |
|
|
*/
|
22 |
|
|
|
23 |
|
|
#ifndef OS_uCOS_II_H
|
24 |
|
|
#define OS_uCOS_II_H
|
25 |
|
|
|
26 |
|
|
#ifdef __cplusplus
|
27 |
|
|
extern "C" {
|
28 |
|
|
#endif
|
29 |
|
|
|
30 |
|
|
/*
|
31 |
|
|
*********************************************************************************************************
|
32 |
|
|
* uC/OS-II VERSION NUMBER
|
33 |
|
|
*********************************************************************************************************
|
34 |
|
|
*/
|
35 |
|
|
|
36 |
|
|
#define OS_VERSION 291u /* Version of uC/OS-II (Vx.yy mult. by 100) */
|
37 |
|
|
|
38 |
|
|
/*
|
39 |
|
|
*********************************************************************************************************
|
40 |
|
|
* INCLUDE HEADER FILES
|
41 |
|
|
*********************************************************************************************************
|
42 |
|
|
*/
|
43 |
|
|
|
44 |
|
|
#include <app_cfg.h>
|
45 |
|
|
#include <os_cfg.h>
|
46 |
|
|
#include <os_cpu.h>
|
47 |
|
|
|
48 |
|
|
/*
|
49 |
|
|
*********************************************************************************************************
|
50 |
|
|
* MISCELLANEOUS
|
51 |
|
|
*********************************************************************************************************
|
52 |
|
|
*/
|
53 |
|
|
|
54 |
|
|
#ifdef OS_GLOBALS
|
55 |
|
|
#define OS_EXT
|
56 |
|
|
#else
|
57 |
|
|
#define OS_EXT extern
|
58 |
|
|
#endif
|
59 |
|
|
|
60 |
|
|
#ifndef OS_FALSE
|
61 |
|
|
#define OS_FALSE 0u
|
62 |
|
|
#endif
|
63 |
|
|
|
64 |
|
|
#ifndef OS_TRUE
|
65 |
|
|
#define OS_TRUE 1u
|
66 |
|
|
#endif
|
67 |
|
|
|
68 |
|
|
#define OS_ASCII_NUL (INT8U)0
|
69 |
|
|
|
70 |
|
|
#define OS_PRIO_SELF 0xFFu /* Indicate SELF priority */
|
71 |
|
|
|
72 |
|
|
#if OS_TASK_STAT_EN > 0u
|
73 |
|
|
#define OS_N_SYS_TASKS 2u /* Number of system tasks */
|
74 |
|
|
#else
|
75 |
|
|
#define OS_N_SYS_TASKS 1u
|
76 |
|
|
#endif
|
77 |
|
|
|
78 |
|
|
#define OS_TASK_STAT_PRIO (OS_LOWEST_PRIO - 1u) /* Statistic task priority */
|
79 |
|
|
#define OS_TASK_IDLE_PRIO (OS_LOWEST_PRIO) /* IDLE task priority */
|
80 |
|
|
|
81 |
|
|
#if OS_LOWEST_PRIO <= 63u
|
82 |
|
|
#define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 8u + 1u) /* Size of event table */
|
83 |
|
|
#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 8u + 1u) /* Size of ready table */
|
84 |
|
|
#else
|
85 |
|
|
#define OS_EVENT_TBL_SIZE ((OS_LOWEST_PRIO) / 16u + 1u)/* Size of event table */
|
86 |
|
|
#define OS_RDY_TBL_SIZE ((OS_LOWEST_PRIO) / 16u + 1u)/* Size of ready table */
|
87 |
|
|
#endif
|
88 |
|
|
|
89 |
|
|
#define OS_TASK_IDLE_ID 65535u /* ID numbers for Idle, Stat and Timer tasks */
|
90 |
|
|
#define OS_TASK_STAT_ID 65534u
|
91 |
|
|
#define OS_TASK_TMR_ID 65533u
|
92 |
|
|
|
93 |
|
|
#define OS_EVENT_EN (((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u) || (OS_SEM_EN > 0u) || (OS_MUTEX_EN > 0u))
|
94 |
|
|
|
95 |
|
|
#define OS_TCB_RESERVED ((OS_TCB *)1)
|
96 |
|
|
|
97 |
|
|
/*$PAGE*/
|
98 |
|
|
/*
|
99 |
|
|
*********************************************************************************************************
|
100 |
|
|
* TASK STATUS (Bit definition for OSTCBStat)
|
101 |
|
|
*********************************************************************************************************
|
102 |
|
|
*/
|
103 |
|
|
#define OS_STAT_RDY 0x00u /* Ready to run */
|
104 |
|
|
#define OS_STAT_SEM 0x01u /* Pending on semaphore */
|
105 |
|
|
#define OS_STAT_MBOX 0x02u /* Pending on mailbox */
|
106 |
|
|
#define OS_STAT_Q 0x04u /* Pending on queue */
|
107 |
|
|
#define OS_STAT_SUSPEND 0x08u /* Task is suspended */
|
108 |
|
|
#define OS_STAT_MUTEX 0x10u /* Pending on mutual exclusion semaphore */
|
109 |
|
|
#define OS_STAT_FLAG 0x20u /* Pending on event flag group */
|
110 |
|
|
#define OS_STAT_MULTI 0x80u /* Pending on multiple events */
|
111 |
|
|
|
112 |
|
|
#define OS_STAT_PEND_ANY (OS_STAT_SEM | OS_STAT_MBOX | OS_STAT_Q | OS_STAT_MUTEX | OS_STAT_FLAG)
|
113 |
|
|
|
114 |
|
|
/*
|
115 |
|
|
*********************************************************************************************************
|
116 |
|
|
* TASK PEND STATUS (Status codes for OSTCBStatPend)
|
117 |
|
|
*********************************************************************************************************
|
118 |
|
|
*/
|
119 |
|
|
#define OS_STAT_PEND_OK 0u /* Pending status OK, not pending, or pending complete */
|
120 |
|
|
#define OS_STAT_PEND_TO 1u /* Pending timed out */
|
121 |
|
|
#define OS_STAT_PEND_ABORT 2u /* Pending aborted */
|
122 |
|
|
|
123 |
|
|
/*
|
124 |
|
|
*********************************************************************************************************
|
125 |
|
|
* OS_EVENT types
|
126 |
|
|
*********************************************************************************************************
|
127 |
|
|
*/
|
128 |
|
|
#define OS_EVENT_TYPE_UNUSED 0u
|
129 |
|
|
#define OS_EVENT_TYPE_MBOX 1u
|
130 |
|
|
#define OS_EVENT_TYPE_Q 2u
|
131 |
|
|
#define OS_EVENT_TYPE_SEM 3u
|
132 |
|
|
#define OS_EVENT_TYPE_MUTEX 4u
|
133 |
|
|
#define OS_EVENT_TYPE_FLAG 5u
|
134 |
|
|
|
135 |
|
|
#define OS_TMR_TYPE 100u /* Used to identify Timers ... */
|
136 |
|
|
/* ... (Must be different value than OS_EVENT_TYPE_xxx) */
|
137 |
|
|
|
138 |
|
|
/*
|
139 |
|
|
*********************************************************************************************************
|
140 |
|
|
* EVENT FLAGS
|
141 |
|
|
*********************************************************************************************************
|
142 |
|
|
*/
|
143 |
|
|
#define OS_FLAG_WAIT_CLR_ALL 0u /* Wait for ALL the bits specified to be CLR (i.e. 0) */
|
144 |
|
|
#define OS_FLAG_WAIT_CLR_AND 0u
|
145 |
|
|
|
146 |
|
|
#define OS_FLAG_WAIT_CLR_ANY 1u /* Wait for ANY of the bits specified to be CLR (i.e. 0) */
|
147 |
|
|
#define OS_FLAG_WAIT_CLR_OR 1u
|
148 |
|
|
|
149 |
|
|
#define OS_FLAG_WAIT_SET_ALL 2u /* Wait for ALL the bits specified to be SET (i.e. 1) */
|
150 |
|
|
#define OS_FLAG_WAIT_SET_AND 2u
|
151 |
|
|
|
152 |
|
|
#define OS_FLAG_WAIT_SET_ANY 3u /* Wait for ANY of the bits specified to be SET (i.e. 1) */
|
153 |
|
|
#define OS_FLAG_WAIT_SET_OR 3u
|
154 |
|
|
|
155 |
|
|
|
156 |
|
|
#define OS_FLAG_CONSUME 0x80u /* Consume the flags if condition(s) satisfied */
|
157 |
|
|
|
158 |
|
|
|
159 |
|
|
#define OS_FLAG_CLR 0u
|
160 |
|
|
#define OS_FLAG_SET 1u
|
161 |
|
|
|
162 |
|
|
/*
|
163 |
|
|
*********************************************************************************************************
|
164 |
|
|
* Values for OSTickStepState
|
165 |
|
|
*
|
166 |
|
|
* Note(s): This feature is used by uC/OS-View.
|
167 |
|
|
*********************************************************************************************************
|
168 |
|
|
*/
|
169 |
|
|
|
170 |
|
|
#if OS_TICK_STEP_EN > 0u
|
171 |
|
|
#define OS_TICK_STEP_DIS 0u /* Stepping is disabled, tick runs as mormal */
|
172 |
|
|
#define OS_TICK_STEP_WAIT 1u /* Waiting for uC/OS-View to set OSTickStepState to _ONCE */
|
173 |
|
|
#define OS_TICK_STEP_ONCE 2u /* Process tick once and wait for next cmd from uC/OS-View */
|
174 |
|
|
#endif
|
175 |
|
|
|
176 |
|
|
/*
|
177 |
|
|
*********************************************************************************************************
|
178 |
|
|
* Possible values for 'opt' argument of OSSemDel(), OSMboxDel(), OSQDel() and OSMutexDel()
|
179 |
|
|
*********************************************************************************************************
|
180 |
|
|
*/
|
181 |
|
|
#define OS_DEL_NO_PEND 0u
|
182 |
|
|
#define OS_DEL_ALWAYS 1u
|
183 |
|
|
|
184 |
|
|
/*
|
185 |
|
|
*********************************************************************************************************
|
186 |
|
|
* OS???Pend() OPTIONS
|
187 |
|
|
*
|
188 |
|
|
* These #defines are used to establish the options for OS???PendAbort().
|
189 |
|
|
*********************************************************************************************************
|
190 |
|
|
*/
|
191 |
|
|
#define OS_PEND_OPT_NONE 0u /* NO option selected */
|
192 |
|
|
#define OS_PEND_OPT_BROADCAST 1u /* Broadcast action to ALL tasks waiting */
|
193 |
|
|
|
194 |
|
|
/*
|
195 |
|
|
*********************************************************************************************************
|
196 |
|
|
* OS???PostOpt() OPTIONS
|
197 |
|
|
*
|
198 |
|
|
* These #defines are used to establish the options for OSMboxPostOpt() and OSQPostOpt().
|
199 |
|
|
*********************************************************************************************************
|
200 |
|
|
*/
|
201 |
|
|
#define OS_POST_OPT_NONE 0x00u /* NO option selected */
|
202 |
|
|
#define OS_POST_OPT_BROADCAST 0x01u /* Broadcast message to ALL tasks waiting */
|
203 |
|
|
#define OS_POST_OPT_FRONT 0x02u /* Post to highest priority task waiting */
|
204 |
|
|
#define OS_POST_OPT_NO_SCHED 0x04u /* Do not call the scheduler if this option is selected */
|
205 |
|
|
|
206 |
|
|
/*
|
207 |
|
|
*********************************************************************************************************
|
208 |
|
|
* TASK OPTIONS (see OSTaskCreateExt())
|
209 |
|
|
*********************************************************************************************************
|
210 |
|
|
*/
|
211 |
|
|
#define OS_TASK_OPT_NONE 0x0000u /* NO option selected */
|
212 |
|
|
#define OS_TASK_OPT_STK_CHK 0x0001u /* Enable stack checking for the task */
|
213 |
|
|
#define OS_TASK_OPT_STK_CLR 0x0002u /* Clear the stack when the task is create */
|
214 |
|
|
#define OS_TASK_OPT_SAVE_FP 0x0004u /* Save the contents of any floating-point registers */
|
215 |
|
|
|
216 |
|
|
/*
|
217 |
|
|
*********************************************************************************************************
|
218 |
|
|
* TIMER OPTIONS (see OSTmrStart() and OSTmrStop())
|
219 |
|
|
*********************************************************************************************************
|
220 |
|
|
*/
|
221 |
|
|
#define OS_TMR_OPT_NONE 0u /* No option selected */
|
222 |
|
|
|
223 |
|
|
#define OS_TMR_OPT_ONE_SHOT 1u /* Timer will not automatically restart when it expires */
|
224 |
|
|
#define OS_TMR_OPT_PERIODIC 2u /* Timer will automatically restart when it expires */
|
225 |
|
|
|
226 |
|
|
#define OS_TMR_OPT_CALLBACK 3u /* OSTmrStop() option to call 'callback' w/ timer arg. */
|
227 |
|
|
#define OS_TMR_OPT_CALLBACK_ARG 4u /* OSTmrStop() option to call 'callback' w/ new arg. */
|
228 |
|
|
|
229 |
|
|
/*
|
230 |
|
|
*********************************************************************************************************
|
231 |
|
|
* TIMER STATES
|
232 |
|
|
*********************************************************************************************************
|
233 |
|
|
*/
|
234 |
|
|
#define OS_TMR_STATE_UNUSED 0u
|
235 |
|
|
#define OS_TMR_STATE_STOPPED 1u
|
236 |
|
|
#define OS_TMR_STATE_COMPLETED 2u
|
237 |
|
|
#define OS_TMR_STATE_RUNNING 3u
|
238 |
|
|
|
239 |
|
|
/*
|
240 |
|
|
*********************************************************************************************************
|
241 |
|
|
* ERROR CODES
|
242 |
|
|
*********************************************************************************************************
|
243 |
|
|
*/
|
244 |
|
|
#define OS_ERR_NONE 0u
|
245 |
|
|
|
246 |
|
|
#define OS_ERR_EVENT_TYPE 1u
|
247 |
|
|
#define OS_ERR_PEND_ISR 2u
|
248 |
|
|
#define OS_ERR_POST_NULL_PTR 3u
|
249 |
|
|
#define OS_ERR_PEVENT_NULL 4u
|
250 |
|
|
#define OS_ERR_POST_ISR 5u
|
251 |
|
|
#define OS_ERR_QUERY_ISR 6u
|
252 |
|
|
#define OS_ERR_INVALID_OPT 7u
|
253 |
|
|
#define OS_ERR_ID_INVALID 8u
|
254 |
|
|
#define OS_ERR_PDATA_NULL 9u
|
255 |
|
|
|
256 |
|
|
#define OS_ERR_TIMEOUT 10u
|
257 |
|
|
#define OS_ERR_EVENT_NAME_TOO_LONG 11u
|
258 |
|
|
#define OS_ERR_PNAME_NULL 12u
|
259 |
|
|
#define OS_ERR_PEND_LOCKED 13u
|
260 |
|
|
#define OS_ERR_PEND_ABORT 14u
|
261 |
|
|
#define OS_ERR_DEL_ISR 15u
|
262 |
|
|
#define OS_ERR_CREATE_ISR 16u
|
263 |
|
|
#define OS_ERR_NAME_GET_ISR 17u
|
264 |
|
|
#define OS_ERR_NAME_SET_ISR 18u
|
265 |
|
|
#define OS_ERR_ILLEGAL_CREATE_RUN_TIME 19u
|
266 |
|
|
|
267 |
|
|
#define OS_ERR_MBOX_FULL 20u
|
268 |
|
|
|
269 |
|
|
#define OS_ERR_Q_FULL 30u
|
270 |
|
|
#define OS_ERR_Q_EMPTY 31u
|
271 |
|
|
|
272 |
|
|
#define OS_ERR_PRIO_EXIST 40u
|
273 |
|
|
#define OS_ERR_PRIO 41u
|
274 |
|
|
#define OS_ERR_PRIO_INVALID 42u
|
275 |
|
|
|
276 |
|
|
#define OS_ERR_SCHED_LOCKED 50u
|
277 |
|
|
#define OS_ERR_SEM_OVF 51u
|
278 |
|
|
|
279 |
|
|
#define OS_ERR_TASK_CREATE_ISR 60u
|
280 |
|
|
#define OS_ERR_TASK_DEL 61u
|
281 |
|
|
#define OS_ERR_TASK_DEL_IDLE 62u
|
282 |
|
|
#define OS_ERR_TASK_DEL_REQ 63u
|
283 |
|
|
#define OS_ERR_TASK_DEL_ISR 64u
|
284 |
|
|
#define OS_ERR_TASK_NAME_TOO_LONG 65u
|
285 |
|
|
#define OS_ERR_TASK_NO_MORE_TCB 66u
|
286 |
|
|
#define OS_ERR_TASK_NOT_EXIST 67u
|
287 |
|
|
#define OS_ERR_TASK_NOT_SUSPENDED 68u
|
288 |
|
|
#define OS_ERR_TASK_OPT 69u
|
289 |
|
|
#define OS_ERR_TASK_RESUME_PRIO 70u
|
290 |
|
|
#define OS_ERR_TASK_SUSPEND_IDLE 71u
|
291 |
|
|
#define OS_ERR_TASK_SUSPEND_PRIO 72u
|
292 |
|
|
#define OS_ERR_TASK_WAITING 73u
|
293 |
|
|
|
294 |
|
|
#define OS_ERR_TIME_NOT_DLY 80u
|
295 |
|
|
#define OS_ERR_TIME_INVALID_MINUTES 81u
|
296 |
|
|
#define OS_ERR_TIME_INVALID_SECONDS 82u
|
297 |
|
|
#define OS_ERR_TIME_INVALID_MS 83u
|
298 |
|
|
#define OS_ERR_TIME_ZERO_DLY 84u
|
299 |
|
|
#define OS_ERR_TIME_DLY_ISR 85u
|
300 |
|
|
|
301 |
|
|
#define OS_ERR_MEM_INVALID_PART 90u
|
302 |
|
|
#define OS_ERR_MEM_INVALID_BLKS 91u
|
303 |
|
|
#define OS_ERR_MEM_INVALID_SIZE 92u
|
304 |
|
|
#define OS_ERR_MEM_NO_FREE_BLKS 93u
|
305 |
|
|
#define OS_ERR_MEM_FULL 94u
|
306 |
|
|
#define OS_ERR_MEM_INVALID_PBLK 95u
|
307 |
|
|
#define OS_ERR_MEM_INVALID_PMEM 96u
|
308 |
|
|
#define OS_ERR_MEM_INVALID_PDATA 97u
|
309 |
|
|
#define OS_ERR_MEM_INVALID_ADDR 98u
|
310 |
|
|
#define OS_ERR_MEM_NAME_TOO_LONG 99u
|
311 |
|
|
|
312 |
|
|
#define OS_ERR_NOT_MUTEX_OWNER 100u
|
313 |
|
|
|
314 |
|
|
#define OS_ERR_FLAG_INVALID_PGRP 110u
|
315 |
|
|
#define OS_ERR_FLAG_WAIT_TYPE 111u
|
316 |
|
|
#define OS_ERR_FLAG_NOT_RDY 112u
|
317 |
|
|
#define OS_ERR_FLAG_INVALID_OPT 113u
|
318 |
|
|
#define OS_ERR_FLAG_GRP_DEPLETED 114u
|
319 |
|
|
#define OS_ERR_FLAG_NAME_TOO_LONG 115u
|
320 |
|
|
|
321 |
|
|
#define OS_ERR_PIP_LOWER 120u
|
322 |
|
|
|
323 |
|
|
#define OS_ERR_TMR_INVALID_DLY 130u
|
324 |
|
|
#define OS_ERR_TMR_INVALID_PERIOD 131u
|
325 |
|
|
#define OS_ERR_TMR_INVALID_OPT 132u
|
326 |
|
|
#define OS_ERR_TMR_INVALID_NAME 133u
|
327 |
|
|
#define OS_ERR_TMR_NON_AVAIL 134u
|
328 |
|
|
#define OS_ERR_TMR_INACTIVE 135u
|
329 |
|
|
#define OS_ERR_TMR_INVALID_DEST 136u
|
330 |
|
|
#define OS_ERR_TMR_INVALID_TYPE 137u
|
331 |
|
|
#define OS_ERR_TMR_INVALID 138u
|
332 |
|
|
#define OS_ERR_TMR_ISR 139u
|
333 |
|
|
#define OS_ERR_TMR_NAME_TOO_LONG 140u
|
334 |
|
|
#define OS_ERR_TMR_INVALID_STATE 141u
|
335 |
|
|
#define OS_ERR_TMR_STOPPED 142u
|
336 |
|
|
#define OS_ERR_TMR_NO_CALLBACK 143u
|
337 |
|
|
|
338 |
|
|
/*$PAGE*/
|
339 |
|
|
/*
|
340 |
|
|
*********************************************************************************************************
|
341 |
|
|
* EVENT CONTROL BLOCK
|
342 |
|
|
*********************************************************************************************************
|
343 |
|
|
*/
|
344 |
|
|
|
345 |
|
|
#if OS_LOWEST_PRIO <= 63u
|
346 |
|
|
typedef INT8U OS_PRIO;
|
347 |
|
|
#else
|
348 |
|
|
typedef INT16U OS_PRIO;
|
349 |
|
|
#endif
|
350 |
|
|
|
351 |
|
|
#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0u)
|
352 |
|
|
typedef struct os_event {
|
353 |
|
|
INT8U OSEventType; /* Type of event control block (see OS_EVENT_TYPE_xxxx) */
|
354 |
|
|
void *OSEventPtr; /* Pointer to message or queue structure */
|
355 |
|
|
INT16U OSEventCnt; /* Semaphore Count (not used if other EVENT type) */
|
356 |
|
|
OS_PRIO OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
|
357 |
|
|
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
|
358 |
|
|
|
359 |
|
|
#if OS_EVENT_NAME_EN > 0u
|
360 |
|
|
INT8U *OSEventName;
|
361 |
|
|
#endif
|
362 |
|
|
} OS_EVENT;
|
363 |
|
|
#endif
|
364 |
|
|
|
365 |
|
|
|
366 |
|
|
/*
|
367 |
|
|
*********************************************************************************************************
|
368 |
|
|
* EVENT FLAGS CONTROL BLOCK
|
369 |
|
|
*********************************************************************************************************
|
370 |
|
|
*/
|
371 |
|
|
|
372 |
|
|
#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
|
373 |
|
|
|
374 |
|
|
#if OS_FLAGS_NBITS == 8u /* Determine the size of OS_FLAGS (8, 16 or 32 bits) */
|
375 |
|
|
typedef INT8U OS_FLAGS;
|
376 |
|
|
#endif
|
377 |
|
|
|
378 |
|
|
#if OS_FLAGS_NBITS == 16u
|
379 |
|
|
typedef INT16U OS_FLAGS;
|
380 |
|
|
#endif
|
381 |
|
|
|
382 |
|
|
#if OS_FLAGS_NBITS == 32u
|
383 |
|
|
typedef INT32U OS_FLAGS;
|
384 |
|
|
#endif
|
385 |
|
|
|
386 |
|
|
|
387 |
|
|
typedef struct os_flag_grp { /* Event Flag Group */
|
388 |
|
|
INT8U OSFlagType; /* Should be set to OS_EVENT_TYPE_FLAG */
|
389 |
|
|
void *OSFlagWaitList; /* Pointer to first NODE of task waiting on event flag */
|
390 |
|
|
OS_FLAGS OSFlagFlags; /* 8, 16 or 32 bit flags */
|
391 |
|
|
#if OS_FLAG_NAME_EN > 0u
|
392 |
|
|
INT8U *OSFlagName;
|
393 |
|
|
#endif
|
394 |
|
|
} OS_FLAG_GRP;
|
395 |
|
|
|
396 |
|
|
|
397 |
|
|
|
398 |
|
|
typedef struct os_flag_node { /* Event Flag Wait List Node */
|
399 |
|
|
void *OSFlagNodeNext; /* Pointer to next NODE in wait list */
|
400 |
|
|
void *OSFlagNodePrev; /* Pointer to previous NODE in wait list */
|
401 |
|
|
void *OSFlagNodeTCB; /* Pointer to TCB of waiting task */
|
402 |
|
|
void *OSFlagNodeFlagGrp; /* Pointer to Event Flag Group */
|
403 |
|
|
OS_FLAGS OSFlagNodeFlags; /* Event flag to wait on */
|
404 |
|
|
INT8U OSFlagNodeWaitType; /* Type of wait: */
|
405 |
|
|
/* OS_FLAG_WAIT_AND */
|
406 |
|
|
/* OS_FLAG_WAIT_ALL */
|
407 |
|
|
/* OS_FLAG_WAIT_OR */
|
408 |
|
|
/* OS_FLAG_WAIT_ANY */
|
409 |
|
|
} OS_FLAG_NODE;
|
410 |
|
|
#endif
|
411 |
|
|
|
412 |
|
|
/*$PAGE*/
|
413 |
|
|
/*
|
414 |
|
|
*********************************************************************************************************
|
415 |
|
|
* MESSAGE MAILBOX DATA
|
416 |
|
|
*********************************************************************************************************
|
417 |
|
|
*/
|
418 |
|
|
|
419 |
|
|
#if OS_MBOX_EN > 0u
|
420 |
|
|
typedef struct os_mbox_data {
|
421 |
|
|
void *OSMsg; /* Pointer to message in mailbox */
|
422 |
|
|
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
|
423 |
|
|
OS_PRIO OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
|
424 |
|
|
} OS_MBOX_DATA;
|
425 |
|
|
#endif
|
426 |
|
|
|
427 |
|
|
/*
|
428 |
|
|
*********************************************************************************************************
|
429 |
|
|
* MEMORY PARTITION DATA STRUCTURES
|
430 |
|
|
*********************************************************************************************************
|
431 |
|
|
*/
|
432 |
|
|
|
433 |
|
|
#if (OS_MEM_EN > 0u) && (OS_MAX_MEM_PART > 0u)
|
434 |
|
|
typedef struct os_mem { /* MEMORY CONTROL BLOCK */
|
435 |
|
|
void *OSMemAddr; /* Pointer to beginning of memory partition */
|
436 |
|
|
void *OSMemFreeList; /* Pointer to list of free memory blocks */
|
437 |
|
|
INT32U OSMemBlkSize; /* Size (in bytes) of each block of memory */
|
438 |
|
|
INT32U OSMemNBlks; /* Total number of blocks in this partition */
|
439 |
|
|
INT32U OSMemNFree; /* Number of memory blocks remaining in this partition */
|
440 |
|
|
#if OS_MEM_NAME_EN > 0u
|
441 |
|
|
INT8U *OSMemName; /* Memory partition name */
|
442 |
|
|
#endif
|
443 |
|
|
} OS_MEM;
|
444 |
|
|
|
445 |
|
|
|
446 |
|
|
typedef struct os_mem_data {
|
447 |
|
|
void *OSAddr; /* Pointer to the beginning address of the memory partition */
|
448 |
|
|
void *OSFreeList; /* Pointer to the beginning of the free list of memory blocks */
|
449 |
|
|
INT32U OSBlkSize; /* Size (in bytes) of each memory block */
|
450 |
|
|
INT32U OSNBlks; /* Total number of blocks in the partition */
|
451 |
|
|
INT32U OSNFree; /* Number of memory blocks free */
|
452 |
|
|
INT32U OSNUsed; /* Number of memory blocks used */
|
453 |
|
|
} OS_MEM_DATA;
|
454 |
|
|
#endif
|
455 |
|
|
|
456 |
|
|
/*$PAGE*/
|
457 |
|
|
/*
|
458 |
|
|
*********************************************************************************************************
|
459 |
|
|
* MUTUAL EXCLUSION SEMAPHORE DATA
|
460 |
|
|
*********************************************************************************************************
|
461 |
|
|
*/
|
462 |
|
|
|
463 |
|
|
#if OS_MUTEX_EN > 0u
|
464 |
|
|
typedef struct os_mutex_data {
|
465 |
|
|
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
|
466 |
|
|
OS_PRIO OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
|
467 |
|
|
BOOLEAN OSValue; /* Mutex value (OS_FALSE = used, OS_TRUE = available) */
|
468 |
|
|
INT8U OSOwnerPrio; /* Mutex owner's task priority or 0xFF if no owner */
|
469 |
|
|
INT8U OSMutexPIP; /* Priority Inheritance Priority or 0xFF if no owner */
|
470 |
|
|
} OS_MUTEX_DATA;
|
471 |
|
|
#endif
|
472 |
|
|
|
473 |
|
|
/*
|
474 |
|
|
*********************************************************************************************************
|
475 |
|
|
* MESSAGE QUEUE DATA
|
476 |
|
|
*********************************************************************************************************
|
477 |
|
|
*/
|
478 |
|
|
|
479 |
|
|
#if OS_Q_EN > 0u
|
480 |
|
|
typedef struct os_q { /* QUEUE CONTROL BLOCK */
|
481 |
|
|
struct os_q *OSQPtr; /* Link to next queue control block in list of free blocks */
|
482 |
|
|
void **OSQStart; /* Pointer to start of queue data */
|
483 |
|
|
void **OSQEnd; /* Pointer to end of queue data */
|
484 |
|
|
void **OSQIn; /* Pointer to where next message will be inserted in the Q */
|
485 |
|
|
void **OSQOut; /* Pointer to where next message will be extracted from the Q */
|
486 |
|
|
INT16U OSQSize; /* Size of queue (maximum number of entries) */
|
487 |
|
|
INT16U OSQEntries; /* Current number of entries in the queue */
|
488 |
|
|
} OS_Q;
|
489 |
|
|
|
490 |
|
|
|
491 |
|
|
typedef struct os_q_data {
|
492 |
|
|
void *OSMsg; /* Pointer to next message to be extracted from queue */
|
493 |
|
|
INT16U OSNMsgs; /* Number of messages in message queue */
|
494 |
|
|
INT16U OSQSize; /* Size of message queue */
|
495 |
|
|
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
|
496 |
|
|
OS_PRIO OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
|
497 |
|
|
} OS_Q_DATA;
|
498 |
|
|
#endif
|
499 |
|
|
|
500 |
|
|
/*
|
501 |
|
|
*********************************************************************************************************
|
502 |
|
|
* SEMAPHORE DATA
|
503 |
|
|
*********************************************************************************************************
|
504 |
|
|
*/
|
505 |
|
|
|
506 |
|
|
#if OS_SEM_EN > 0u
|
507 |
|
|
typedef struct os_sem_data {
|
508 |
|
|
INT16U OSCnt; /* Semaphore count */
|
509 |
|
|
OS_PRIO OSEventTbl[OS_EVENT_TBL_SIZE]; /* List of tasks waiting for event to occur */
|
510 |
|
|
OS_PRIO OSEventGrp; /* Group corresponding to tasks waiting for event to occur */
|
511 |
|
|
} OS_SEM_DATA;
|
512 |
|
|
#endif
|
513 |
|
|
|
514 |
|
|
/*
|
515 |
|
|
*********************************************************************************************************
|
516 |
|
|
* TASK STACK DATA
|
517 |
|
|
*********************************************************************************************************
|
518 |
|
|
*/
|
519 |
|
|
|
520 |
|
|
#if OS_TASK_CREATE_EXT_EN > 0u
|
521 |
|
|
typedef struct os_stk_data {
|
522 |
|
|
INT32U OSFree; /* Number of free bytes on the stack */
|
523 |
|
|
INT32U OSUsed; /* Number of bytes used on the stack */
|
524 |
|
|
} OS_STK_DATA;
|
525 |
|
|
#endif
|
526 |
|
|
|
527 |
|
|
/*$PAGE*/
|
528 |
|
|
/*
|
529 |
|
|
*********************************************************************************************************
|
530 |
|
|
* TASK CONTROL BLOCK
|
531 |
|
|
*********************************************************************************************************
|
532 |
|
|
*/
|
533 |
|
|
|
534 |
|
|
typedef struct os_tcb {
|
535 |
|
|
OS_STK *OSTCBStkPtr; /* Pointer to current top of stack */
|
536 |
|
|
|
537 |
|
|
#if OS_TASK_CREATE_EXT_EN > 0u
|
538 |
|
|
void *OSTCBExtPtr; /* Pointer to user definable data for TCB extension */
|
539 |
|
|
OS_STK *OSTCBStkBottom; /* Pointer to bottom of stack */
|
540 |
|
|
INT32U OSTCBStkSize; /* Size of task stack (in number of stack elements) */
|
541 |
|
|
INT16U OSTCBOpt; /* Task options as passed by OSTaskCreateExt() */
|
542 |
|
|
INT16U OSTCBId; /* Task ID (0..65535) */
|
543 |
|
|
#endif
|
544 |
|
|
|
545 |
|
|
struct os_tcb *OSTCBNext; /* Pointer to next TCB in the TCB list */
|
546 |
|
|
struct os_tcb *OSTCBPrev; /* Pointer to previous TCB in the TCB list */
|
547 |
|
|
|
548 |
|
|
#if (OS_EVENT_EN)
|
549 |
|
|
OS_EVENT *OSTCBEventPtr; /* Pointer to event control block */
|
550 |
|
|
#endif
|
551 |
|
|
|
552 |
|
|
#if (OS_EVENT_EN) && (OS_EVENT_MULTI_EN > 0u)
|
553 |
|
|
OS_EVENT **OSTCBEventMultiPtr; /* Pointer to multiple event control blocks */
|
554 |
|
|
#endif
|
555 |
|
|
|
556 |
|
|
#if ((OS_Q_EN > 0u) && (OS_MAX_QS > 0u)) || (OS_MBOX_EN > 0u)
|
557 |
|
|
void *OSTCBMsg; /* Message received from OSMboxPost() or OSQPost() */
|
558 |
|
|
#endif
|
559 |
|
|
|
560 |
|
|
#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
|
561 |
|
|
#if OS_TASK_DEL_EN > 0u
|
562 |
|
|
OS_FLAG_NODE *OSTCBFlagNode; /* Pointer to event flag node */
|
563 |
|
|
#endif
|
564 |
|
|
OS_FLAGS OSTCBFlagsRdy; /* Event flags that made task ready to run */
|
565 |
|
|
#endif
|
566 |
|
|
|
567 |
|
|
INT32U OSTCBDly; /* Nbr ticks to delay task or, timeout waiting for event */
|
568 |
|
|
INT8U OSTCBStat; /* Task status */
|
569 |
|
|
INT8U OSTCBStatPend; /* Task PEND status */
|
570 |
|
|
INT8U OSTCBPrio; /* Task priority (0 == highest) */
|
571 |
|
|
|
572 |
|
|
INT8U OSTCBX; /* Bit position in group corresponding to task priority */
|
573 |
|
|
INT8U OSTCBY; /* Index into ready table corresponding to task priority */
|
574 |
|
|
OS_PRIO OSTCBBitX; /* Bit mask to access bit position in ready table */
|
575 |
|
|
OS_PRIO OSTCBBitY; /* Bit mask to access bit position in ready group */
|
576 |
|
|
|
577 |
|
|
#if OS_TASK_DEL_EN > 0u
|
578 |
|
|
INT8U OSTCBDelReq; /* Indicates whether a task needs to delete itself */
|
579 |
|
|
#endif
|
580 |
|
|
|
581 |
|
|
#if OS_TASK_PROFILE_EN > 0u
|
582 |
|
|
INT32U OSTCBCtxSwCtr; /* Number of time the task was switched in */
|
583 |
|
|
INT32U OSTCBCyclesTot; /* Total number of clock cycles the task has been running */
|
584 |
|
|
INT32U OSTCBCyclesStart; /* Snapshot of cycle counter at start of task resumption */
|
585 |
|
|
OS_STK *OSTCBStkBase; /* Pointer to the beginning of the task stack */
|
586 |
|
|
INT32U OSTCBStkUsed; /* Number of bytes used from the stack */
|
587 |
|
|
#endif
|
588 |
|
|
|
589 |
|
|
#if OS_TASK_NAME_EN > 0u
|
590 |
|
|
INT8U *OSTCBTaskName;
|
591 |
|
|
#endif
|
592 |
|
|
|
593 |
|
|
#if OS_TASK_REG_TBL_SIZE > 0u
|
594 |
|
|
INT32U OSTCBRegTbl[OS_TASK_REG_TBL_SIZE];
|
595 |
|
|
#endif
|
596 |
|
|
} OS_TCB;
|
597 |
|
|
|
598 |
|
|
/*$PAGE*/
|
599 |
|
|
/*
|
600 |
|
|
************************************************************************************************************************
|
601 |
|
|
* TIMER DATA TYPES
|
602 |
|
|
************************************************************************************************************************
|
603 |
|
|
*/
|
604 |
|
|
|
605 |
|
|
#if OS_TMR_EN > 0u
|
606 |
|
|
typedef void (*OS_TMR_CALLBACK)(void *ptmr, void *parg);
|
607 |
|
|
|
608 |
|
|
|
609 |
|
|
|
610 |
|
|
typedef struct os_tmr {
|
611 |
|
|
INT8U OSTmrType; /* Should be set to OS_TMR_TYPE */
|
612 |
|
|
OS_TMR_CALLBACK OSTmrCallback; /* Function to call when timer expires */
|
613 |
|
|
void *OSTmrCallbackArg; /* Argument to pass to function when timer expires */
|
614 |
|
|
void *OSTmrNext; /* Double link list pointers */
|
615 |
|
|
void *OSTmrPrev;
|
616 |
|
|
INT32U OSTmrMatch; /* Timer expires when OSTmrTime == OSTmrMatch */
|
617 |
|
|
INT32U OSTmrDly; /* Delay time before periodic update starts */
|
618 |
|
|
INT32U OSTmrPeriod; /* Period to repeat timer */
|
619 |
|
|
#if OS_TMR_CFG_NAME_EN > 0u
|
620 |
|
|
INT8U *OSTmrName; /* Name to give the timer */
|
621 |
|
|
#endif
|
622 |
|
|
INT8U OSTmrOpt; /* Options (see OS_TMR_OPT_xxx) */
|
623 |
|
|
INT8U OSTmrState; /* Indicates the state of the timer: */
|
624 |
|
|
/* OS_TMR_STATE_UNUSED */
|
625 |
|
|
/* OS_TMR_STATE_RUNNING */
|
626 |
|
|
/* OS_TMR_STATE_STOPPED */
|
627 |
|
|
} OS_TMR;
|
628 |
|
|
|
629 |
|
|
|
630 |
|
|
|
631 |
|
|
typedef struct os_tmr_wheel {
|
632 |
|
|
OS_TMR *OSTmrFirst; /* Pointer to first timer in linked list */
|
633 |
|
|
INT16U OSTmrEntries;
|
634 |
|
|
} OS_TMR_WHEEL;
|
635 |
|
|
#endif
|
636 |
|
|
|
637 |
|
|
/*$PAGE*/
|
638 |
|
|
/*
|
639 |
|
|
*********************************************************************************************************
|
640 |
|
|
* GLOBAL VARIABLES
|
641 |
|
|
*********************************************************************************************************
|
642 |
|
|
*/
|
643 |
|
|
|
644 |
|
|
OS_EXT INT32U OSCtxSwCtr; /* Counter of number of context switches */
|
645 |
|
|
|
646 |
|
|
#if (OS_EVENT_EN) && (OS_MAX_EVENTS > 0u)
|
647 |
|
|
OS_EXT OS_EVENT *OSEventFreeList; /* Pointer to list of free EVENT control blocks */
|
648 |
|
|
OS_EXT OS_EVENT OSEventTbl[OS_MAX_EVENTS];/* Table of EVENT control blocks */
|
649 |
|
|
#endif
|
650 |
|
|
|
651 |
|
|
#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
|
652 |
|
|
OS_EXT OS_FLAG_GRP OSFlagTbl[OS_MAX_FLAGS]; /* Table containing event flag groups */
|
653 |
|
|
OS_EXT OS_FLAG_GRP *OSFlagFreeList; /* Pointer to free list of event flag groups */
|
654 |
|
|
#endif
|
655 |
|
|
|
656 |
|
|
#if OS_TASK_STAT_EN > 0u
|
657 |
|
|
OS_EXT INT8U OSCPUUsage; /* Percentage of CPU used */
|
658 |
|
|
OS_EXT INT32U OSIdleCtrMax; /* Max. value that idle ctr can take in 1 sec. */
|
659 |
|
|
OS_EXT INT32U OSIdleCtrRun; /* Val. reached by idle ctr at run time in 1 sec. */
|
660 |
|
|
OS_EXT BOOLEAN OSStatRdy; /* Flag indicating that the statistic task is rdy */
|
661 |
|
|
OS_EXT OS_STK OSTaskStatStk[OS_TASK_STAT_STK_SIZE]; /* Statistics task stack */
|
662 |
|
|
#endif
|
663 |
|
|
|
664 |
|
|
OS_EXT INT8U OSIntNesting; /* Interrupt nesting level */
|
665 |
|
|
|
666 |
|
|
OS_EXT INT8U OSLockNesting; /* Multitasking lock nesting level */
|
667 |
|
|
|
668 |
|
|
OS_EXT INT8U OSPrioCur; /* Priority of current task */
|
669 |
|
|
OS_EXT INT8U OSPrioHighRdy; /* Priority of highest priority task */
|
670 |
|
|
|
671 |
|
|
OS_EXT OS_PRIO OSRdyGrp; /* Ready list group */
|
672 |
|
|
OS_EXT OS_PRIO OSRdyTbl[OS_RDY_TBL_SIZE]; /* Table of tasks which are ready to run */
|
673 |
|
|
|
674 |
|
|
OS_EXT BOOLEAN OSRunning; /* Flag indicating that kernel is running */
|
675 |
|
|
|
676 |
|
|
OS_EXT INT8U OSTaskCtr; /* Number of tasks created */
|
677 |
|
|
|
678 |
|
|
OS_EXT volatile INT32U OSIdleCtr; /* Idle counter */
|
679 |
|
|
|
680 |
|
|
#ifdef OS_SAFETY_CRITICAL_IEC61508
|
681 |
|
|
OS_EXT BOOLEAN OSSafetyCriticalStartFlag;
|
682 |
|
|
#endif
|
683 |
|
|
|
684 |
|
|
OS_EXT OS_STK OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE]; /* Idle task stack */
|
685 |
|
|
|
686 |
|
|
|
687 |
|
|
OS_EXT OS_TCB *OSTCBCur; /* Pointer to currently running TCB */
|
688 |
|
|
OS_EXT OS_TCB *OSTCBFreeList; /* Pointer to list of free TCBs */
|
689 |
|
|
OS_EXT OS_TCB *OSTCBHighRdy; /* Pointer to highest priority TCB R-to-R */
|
690 |
|
|
OS_EXT OS_TCB *OSTCBList; /* Pointer to doubly linked list of TCBs */
|
691 |
|
|
OS_EXT OS_TCB *OSTCBPrioTbl[OS_LOWEST_PRIO + 1u]; /* Table of pointers to created TCBs */
|
692 |
|
|
OS_EXT OS_TCB OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS]; /* Table of TCBs */
|
693 |
|
|
|
694 |
|
|
#if OS_TICK_STEP_EN > 0u
|
695 |
|
|
OS_EXT INT8U OSTickStepState; /* Indicates the state of the tick step feature */
|
696 |
|
|
#endif
|
697 |
|
|
|
698 |
|
|
#if (OS_MEM_EN > 0u) && (OS_MAX_MEM_PART > 0u)
|
699 |
|
|
OS_EXT OS_MEM *OSMemFreeList; /* Pointer to free list of memory partitions */
|
700 |
|
|
OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];/* Storage for memory partition manager */
|
701 |
|
|
#endif
|
702 |
|
|
|
703 |
|
|
#if (OS_Q_EN > 0u) && (OS_MAX_QS > 0u)
|
704 |
|
|
OS_EXT OS_Q *OSQFreeList; /* Pointer to list of free QUEUE control blocks */
|
705 |
|
|
OS_EXT OS_Q OSQTbl[OS_MAX_QS]; /* Table of QUEUE control blocks */
|
706 |
|
|
#endif
|
707 |
|
|
|
708 |
|
|
#if OS_TIME_GET_SET_EN > 0u
|
709 |
|
|
OS_EXT volatile INT32U OSTime; /* Current value of system time (in ticks) */
|
710 |
|
|
#endif
|
711 |
|
|
|
712 |
|
|
#if OS_TMR_EN > 0u
|
713 |
|
|
OS_EXT INT16U OSTmrFree; /* Number of free entries in the timer pool */
|
714 |
|
|
OS_EXT INT16U OSTmrUsed; /* Number of timers used */
|
715 |
|
|
OS_EXT INT32U OSTmrTime; /* Current timer time */
|
716 |
|
|
|
717 |
|
|
OS_EXT OS_EVENT *OSTmrSem; /* Sem. used to gain exclusive access to timers */
|
718 |
|
|
OS_EXT OS_EVENT *OSTmrSemSignal; /* Sem. used to signal the update of timers */
|
719 |
|
|
|
720 |
|
|
OS_EXT OS_TMR OSTmrTbl[OS_TMR_CFG_MAX]; /* Table containing pool of timers */
|
721 |
|
|
OS_EXT OS_TMR *OSTmrFreeList; /* Pointer to free list of timers */
|
722 |
|
|
OS_EXT OS_STK OSTmrTaskStk[OS_TASK_TMR_STK_SIZE];
|
723 |
|
|
|
724 |
|
|
OS_EXT OS_TMR_WHEEL OSTmrWheelTbl[OS_TMR_CFG_WHEEL_SIZE];
|
725 |
|
|
#endif
|
726 |
|
|
|
727 |
|
|
extern INT8U const OSUnMapTbl[256]; /* Priority->Index lookup table */
|
728 |
|
|
|
729 |
|
|
#if OS_VERSION >= 204
|
730 |
|
|
void OSInitHookBegin(void);
|
731 |
|
|
void OSInitHookEnd(void);
|
732 |
|
|
#endif
|
733 |
|
|
|
734 |
|
|
void OSIntCtxSw(void);
|
735 |
|
|
|
736 |
|
|
void OSStartHighRdy(void);
|
737 |
|
|
|
738 |
|
|
void OSTaskCreateHook(OS_TCB *ptcb);
|
739 |
|
|
void OSTaskDelHook(OS_TCB *ptcb);
|
740 |
|
|
|
741 |
|
|
#if OS_VERSION >= 251
|
742 |
|
|
void OSTaskIdleHook(void);
|
743 |
|
|
#endif
|
744 |
|
|
|
745 |
|
|
void OSTaskStatHook(void);
|
746 |
|
|
OS_STK *OSTaskStkInit(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT16U opt);
|
747 |
|
|
void OSTaskSwHook(void);
|
748 |
|
|
|
749 |
|
|
#if OS_VERSION >= 204
|
750 |
|
|
void OSTCBInitHook(OS_TCB *ptcb);
|
751 |
|
|
#endif
|
752 |
|
|
|
753 |
|
|
void OSTimeTickHook(void);
|
754 |
|
|
|
755 |
|
|
/*
|
756 |
|
|
*********************************************************************************************************
|
757 |
|
|
* FUNCTION PROTOTYPES
|
758 |
|
|
* (Compiler Specific ISR prototypes)
|
759 |
|
|
*********************************************************************************************************
|
760 |
|
|
*/
|
761 |
|
|
#ifndef OS_ISR_PROTO_EXT
|
762 |
|
|
void OSCtxSw(void);
|
763 |
|
|
void OSTickISR(void);
|
764 |
|
|
#endif
|
765 |
|
|
|
766 |
|
|
/*
|
767 |
|
|
*********************************************************************************************************
|
768 |
|
|
* MISCELLANEOUS
|
769 |
|
|
*********************************************************************************************************
|
770 |
|
|
*/
|
771 |
|
|
|
772 |
|
|
#if (OS_EVENT_EN)
|
773 |
|
|
|
774 |
|
|
#if (OS_EVENT_NAME_EN > 0u)
|
775 |
|
|
INT8U OSEventNameGet (OS_EVENT *pevent,
|
776 |
|
|
INT8U **pname,
|
777 |
|
|
INT8U *perr);
|
778 |
|
|
|
779 |
|
|
void OSEventNameSet (OS_EVENT *pevent,
|
780 |
|
|
INT8U *pname,
|
781 |
|
|
INT8U *perr);
|
782 |
|
|
#endif
|
783 |
|
|
|
784 |
|
|
#if (OS_EVENT_MULTI_EN > 0u)
|
785 |
|
|
INT16U OSEventPendMulti (OS_EVENT **pevents_pend,
|
786 |
|
|
OS_EVENT **pevents_rdy,
|
787 |
|
|
void **pmsgs_rdy,
|
788 |
|
|
INT32U timeout,
|
789 |
|
|
INT8U *perr);
|
790 |
|
|
#endif
|
791 |
|
|
|
792 |
|
|
#endif
|
793 |
|
|
|
794 |
|
|
/*
|
795 |
|
|
*********************************************************************************************************
|
796 |
|
|
* EVENT FLAGS MANAGEMENT
|
797 |
|
|
*********************************************************************************************************
|
798 |
|
|
*/
|
799 |
|
|
|
800 |
|
|
#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
|
801 |
|
|
|
802 |
|
|
#if OS_FLAG_ACCEPT_EN > 0u
|
803 |
|
|
OS_FLAGS OSFlagAccept (OS_FLAG_GRP *pgrp,
|
804 |
|
|
OS_FLAGS flags,
|
805 |
|
|
INT8U wait_type,
|
806 |
|
|
INT8U *perr);
|
807 |
|
|
#endif
|
808 |
|
|
|
809 |
|
|
OS_FLAG_GRP *OSFlagCreate (OS_FLAGS flags,
|
810 |
|
|
INT8U *perr);
|
811 |
|
|
|
812 |
|
|
#if OS_FLAG_DEL_EN > 0u
|
813 |
|
|
OS_FLAG_GRP *OSFlagDel (OS_FLAG_GRP *pgrp,
|
814 |
|
|
INT8U opt,
|
815 |
|
|
INT8U *perr);
|
816 |
|
|
#endif
|
817 |
|
|
|
818 |
|
|
#if (OS_FLAG_EN > 0u) && (OS_FLAG_NAME_EN > 0u)
|
819 |
|
|
INT8U OSFlagNameGet (OS_FLAG_GRP *pgrp,
|
820 |
|
|
INT8U **pname,
|
821 |
|
|
INT8U *perr);
|
822 |
|
|
|
823 |
|
|
void OSFlagNameSet (OS_FLAG_GRP *pgrp,
|
824 |
|
|
INT8U *pname,
|
825 |
|
|
INT8U *perr);
|
826 |
|
|
#endif
|
827 |
|
|
|
828 |
|
|
OS_FLAGS OSFlagPend (OS_FLAG_GRP *pgrp,
|
829 |
|
|
OS_FLAGS flags,
|
830 |
|
|
INT8U wait_type,
|
831 |
|
|
INT32U timeout,
|
832 |
|
|
INT8U *perr);
|
833 |
|
|
|
834 |
|
|
OS_FLAGS OSFlagPendGetFlagsRdy (void);
|
835 |
|
|
OS_FLAGS OSFlagPost (OS_FLAG_GRP *pgrp,
|
836 |
|
|
OS_FLAGS flags,
|
837 |
|
|
INT8U opt,
|
838 |
|
|
INT8U *perr);
|
839 |
|
|
|
840 |
|
|
#if OS_FLAG_QUERY_EN > 0u
|
841 |
|
|
OS_FLAGS OSFlagQuery (OS_FLAG_GRP *pgrp,
|
842 |
|
|
INT8U *perr);
|
843 |
|
|
#endif
|
844 |
|
|
#endif
|
845 |
|
|
|
846 |
|
|
/*
|
847 |
|
|
*********************************************************************************************************
|
848 |
|
|
* MESSAGE MAILBOX MANAGEMENT
|
849 |
|
|
*********************************************************************************************************
|
850 |
|
|
*/
|
851 |
|
|
|
852 |
|
|
#if OS_MBOX_EN > 0u
|
853 |
|
|
|
854 |
|
|
#if OS_MBOX_ACCEPT_EN > 0u
|
855 |
|
|
void *OSMboxAccept (OS_EVENT *pevent);
|
856 |
|
|
#endif
|
857 |
|
|
|
858 |
|
|
OS_EVENT *OSMboxCreate (void *pmsg);
|
859 |
|
|
|
860 |
|
|
#if OS_MBOX_DEL_EN > 0u
|
861 |
|
|
OS_EVENT *OSMboxDel (OS_EVENT *pevent,
|
862 |
|
|
INT8U opt,
|
863 |
|
|
INT8U *perr);
|
864 |
|
|
#endif
|
865 |
|
|
|
866 |
|
|
void *OSMboxPend (OS_EVENT *pevent,
|
867 |
|
|
INT32U timeout,
|
868 |
|
|
INT8U *perr);
|
869 |
|
|
|
870 |
|
|
#if OS_MBOX_PEND_ABORT_EN > 0u
|
871 |
|
|
INT8U OSMboxPendAbort (OS_EVENT *pevent,
|
872 |
|
|
INT8U opt,
|
873 |
|
|
INT8U *perr);
|
874 |
|
|
#endif
|
875 |
|
|
|
876 |
|
|
#if OS_MBOX_POST_EN > 0u
|
877 |
|
|
INT8U OSMboxPost (OS_EVENT *pevent,
|
878 |
|
|
void *pmsg);
|
879 |
|
|
#endif
|
880 |
|
|
|
881 |
|
|
#if OS_MBOX_POST_OPT_EN > 0u
|
882 |
|
|
INT8U OSMboxPostOpt (OS_EVENT *pevent,
|
883 |
|
|
void *pmsg,
|
884 |
|
|
INT8U opt);
|
885 |
|
|
#endif
|
886 |
|
|
|
887 |
|
|
#if OS_MBOX_QUERY_EN > 0u
|
888 |
|
|
INT8U OSMboxQuery (OS_EVENT *pevent,
|
889 |
|
|
OS_MBOX_DATA *p_mbox_data);
|
890 |
|
|
#endif
|
891 |
|
|
#endif
|
892 |
|
|
|
893 |
|
|
/*
|
894 |
|
|
*********************************************************************************************************
|
895 |
|
|
* MEMORY MANAGEMENT
|
896 |
|
|
*********************************************************************************************************
|
897 |
|
|
*/
|
898 |
|
|
|
899 |
|
|
#if (OS_MEM_EN > 0u) && (OS_MAX_MEM_PART > 0u)
|
900 |
|
|
|
901 |
|
|
OS_MEM *OSMemCreate (void *addr,
|
902 |
|
|
INT32U nblks,
|
903 |
|
|
INT32U blksize,
|
904 |
|
|
INT8U *perr);
|
905 |
|
|
|
906 |
|
|
void *OSMemGet (OS_MEM *pmem,
|
907 |
|
|
INT8U *perr);
|
908 |
|
|
#if OS_MEM_NAME_EN > 0u
|
909 |
|
|
INT8U OSMemNameGet (OS_MEM *pmem,
|
910 |
|
|
INT8U **pname,
|
911 |
|
|
INT8U *perr);
|
912 |
|
|
|
913 |
|
|
void OSMemNameSet (OS_MEM *pmem,
|
914 |
|
|
INT8U *pname,
|
915 |
|
|
INT8U *perr);
|
916 |
|
|
#endif
|
917 |
|
|
INT8U OSMemPut (OS_MEM *pmem,
|
918 |
|
|
void *pblk);
|
919 |
|
|
|
920 |
|
|
#if OS_MEM_QUERY_EN > 0u
|
921 |
|
|
INT8U OSMemQuery (OS_MEM *pmem,
|
922 |
|
|
OS_MEM_DATA *p_mem_data);
|
923 |
|
|
#endif
|
924 |
|
|
|
925 |
|
|
#endif
|
926 |
|
|
|
927 |
|
|
/*
|
928 |
|
|
*********************************************************************************************************
|
929 |
|
|
* MUTUAL EXCLUSION SEMAPHORE MANAGEMENT
|
930 |
|
|
*********************************************************************************************************
|
931 |
|
|
*/
|
932 |
|
|
|
933 |
|
|
#if OS_MUTEX_EN > 0u
|
934 |
|
|
|
935 |
|
|
#if OS_MUTEX_ACCEPT_EN > 0u
|
936 |
|
|
BOOLEAN OSMutexAccept (OS_EVENT *pevent,
|
937 |
|
|
INT8U *perr);
|
938 |
|
|
#endif
|
939 |
|
|
|
940 |
|
|
OS_EVENT *OSMutexCreate (INT8U prio,
|
941 |
|
|
INT8U *perr);
|
942 |
|
|
|
943 |
|
|
#if OS_MUTEX_DEL_EN > 0u
|
944 |
|
|
OS_EVENT *OSMutexDel (OS_EVENT *pevent,
|
945 |
|
|
INT8U opt,
|
946 |
|
|
INT8U *perr);
|
947 |
|
|
#endif
|
948 |
|
|
|
949 |
|
|
void OSMutexPend (OS_EVENT *pevent,
|
950 |
|
|
INT32U timeout,
|
951 |
|
|
INT8U *perr);
|
952 |
|
|
|
953 |
|
|
INT8U OSMutexPost (OS_EVENT *pevent);
|
954 |
|
|
|
955 |
|
|
#if OS_MUTEX_QUERY_EN > 0u
|
956 |
|
|
INT8U OSMutexQuery (OS_EVENT *pevent,
|
957 |
|
|
OS_MUTEX_DATA *p_mutex_data);
|
958 |
|
|
#endif
|
959 |
|
|
|
960 |
|
|
#endif
|
961 |
|
|
|
962 |
|
|
/*$PAGE*/
|
963 |
|
|
/*
|
964 |
|
|
*********************************************************************************************************
|
965 |
|
|
* MESSAGE QUEUE MANAGEMENT
|
966 |
|
|
*********************************************************************************************************
|
967 |
|
|
*/
|
968 |
|
|
|
969 |
|
|
#if (OS_Q_EN > 0u) && (OS_MAX_QS > 0u)
|
970 |
|
|
|
971 |
|
|
#if OS_Q_ACCEPT_EN > 0u
|
972 |
|
|
void *OSQAccept (OS_EVENT *pevent,
|
973 |
|
|
INT8U *perr);
|
974 |
|
|
#endif
|
975 |
|
|
|
976 |
|
|
OS_EVENT *OSQCreate (void **start,
|
977 |
|
|
INT16U size);
|
978 |
|
|
|
979 |
|
|
#if OS_Q_DEL_EN > 0u
|
980 |
|
|
OS_EVENT *OSQDel (OS_EVENT *pevent,
|
981 |
|
|
INT8U opt,
|
982 |
|
|
INT8U *perr);
|
983 |
|
|
#endif
|
984 |
|
|
|
985 |
|
|
#if OS_Q_FLUSH_EN > 0u
|
986 |
|
|
INT8U OSQFlush (OS_EVENT *pevent);
|
987 |
|
|
#endif
|
988 |
|
|
|
989 |
|
|
void *OSQPend (OS_EVENT *pevent,
|
990 |
|
|
INT32U timeout,
|
991 |
|
|
INT8U *perr);
|
992 |
|
|
|
993 |
|
|
#if OS_Q_PEND_ABORT_EN > 0u
|
994 |
|
|
INT8U OSQPendAbort (OS_EVENT *pevent,
|
995 |
|
|
INT8U opt,
|
996 |
|
|
INT8U *perr);
|
997 |
|
|
#endif
|
998 |
|
|
|
999 |
|
|
#if OS_Q_POST_EN > 0u
|
1000 |
|
|
INT8U OSQPost (OS_EVENT *pevent,
|
1001 |
|
|
void *pmsg);
|
1002 |
|
|
#endif
|
1003 |
|
|
|
1004 |
|
|
#if OS_Q_POST_FRONT_EN > 0u
|
1005 |
|
|
INT8U OSQPostFront (OS_EVENT *pevent,
|
1006 |
|
|
void *pmsg);
|
1007 |
|
|
#endif
|
1008 |
|
|
|
1009 |
|
|
#if OS_Q_POST_OPT_EN > 0u
|
1010 |
|
|
INT8U OSQPostOpt (OS_EVENT *pevent,
|
1011 |
|
|
void *pmsg,
|
1012 |
|
|
INT8U opt);
|
1013 |
|
|
#endif
|
1014 |
|
|
|
1015 |
|
|
#if OS_Q_QUERY_EN > 0u
|
1016 |
|
|
INT8U OSQQuery (OS_EVENT *pevent,
|
1017 |
|
|
OS_Q_DATA *p_q_data);
|
1018 |
|
|
#endif
|
1019 |
|
|
|
1020 |
|
|
#endif
|
1021 |
|
|
|
1022 |
|
|
/*$PAGE*/
|
1023 |
|
|
/*
|
1024 |
|
|
*********************************************************************************************************
|
1025 |
|
|
* SEMAPHORE MANAGEMENT
|
1026 |
|
|
*********************************************************************************************************
|
1027 |
|
|
*/
|
1028 |
|
|
#if OS_SEM_EN > 0u
|
1029 |
|
|
|
1030 |
|
|
#if OS_SEM_ACCEPT_EN > 0u
|
1031 |
|
|
INT16U OSSemAccept (OS_EVENT *pevent);
|
1032 |
|
|
#endif
|
1033 |
|
|
|
1034 |
|
|
OS_EVENT *OSSemCreate (INT16U cnt);
|
1035 |
|
|
|
1036 |
|
|
#if OS_SEM_DEL_EN > 0u
|
1037 |
|
|
OS_EVENT *OSSemDel (OS_EVENT *pevent,
|
1038 |
|
|
INT8U opt,
|
1039 |
|
|
INT8U *perr);
|
1040 |
|
|
#endif
|
1041 |
|
|
|
1042 |
|
|
void OSSemPend (OS_EVENT *pevent,
|
1043 |
|
|
INT32U timeout,
|
1044 |
|
|
INT8U *perr);
|
1045 |
|
|
|
1046 |
|
|
#if OS_SEM_PEND_ABORT_EN > 0u
|
1047 |
|
|
INT8U OSSemPendAbort (OS_EVENT *pevent,
|
1048 |
|
|
INT8U opt,
|
1049 |
|
|
INT8U *perr);
|
1050 |
|
|
#endif
|
1051 |
|
|
|
1052 |
|
|
INT8U OSSemPost (OS_EVENT *pevent);
|
1053 |
|
|
|
1054 |
|
|
#if OS_SEM_QUERY_EN > 0u
|
1055 |
|
|
INT8U OSSemQuery (OS_EVENT *pevent,
|
1056 |
|
|
OS_SEM_DATA *p_sem_data);
|
1057 |
|
|
#endif
|
1058 |
|
|
|
1059 |
|
|
#if OS_SEM_SET_EN > 0u
|
1060 |
|
|
void OSSemSet (OS_EVENT *pevent,
|
1061 |
|
|
INT16U cnt,
|
1062 |
|
|
INT8U *perr);
|
1063 |
|
|
#endif
|
1064 |
|
|
|
1065 |
|
|
#endif
|
1066 |
|
|
|
1067 |
|
|
/*$PAGE*/
|
1068 |
|
|
/*
|
1069 |
|
|
*********************************************************************************************************
|
1070 |
|
|
* TASK MANAGEMENT
|
1071 |
|
|
*********************************************************************************************************
|
1072 |
|
|
*/
|
1073 |
|
|
#if OS_TASK_CHANGE_PRIO_EN > 0u
|
1074 |
|
|
INT8U OSTaskChangePrio (INT8U oldprio,
|
1075 |
|
|
INT8U newprio);
|
1076 |
|
|
#endif
|
1077 |
|
|
|
1078 |
|
|
#if OS_TASK_CREATE_EN > 0u
|
1079 |
|
|
INT8U OSTaskCreate (void (*task)(void *p_arg),
|
1080 |
|
|
void *p_arg,
|
1081 |
|
|
OS_STK *ptos,
|
1082 |
|
|
INT8U prio);
|
1083 |
|
|
#endif
|
1084 |
|
|
|
1085 |
|
|
#if OS_TASK_CREATE_EXT_EN > 0u
|
1086 |
|
|
INT8U OSTaskCreateExt (void (*task)(void *p_arg),
|
1087 |
|
|
void *p_arg,
|
1088 |
|
|
OS_STK *ptos,
|
1089 |
|
|
INT8U prio,
|
1090 |
|
|
INT16U id,
|
1091 |
|
|
OS_STK *pbos,
|
1092 |
|
|
INT32U stk_size,
|
1093 |
|
|
void *pext,
|
1094 |
|
|
INT16U opt);
|
1095 |
|
|
#endif
|
1096 |
|
|
|
1097 |
|
|
#if OS_TASK_DEL_EN > 0u
|
1098 |
|
|
INT8U OSTaskDel (INT8U prio);
|
1099 |
|
|
INT8U OSTaskDelReq (INT8U prio);
|
1100 |
|
|
#endif
|
1101 |
|
|
|
1102 |
|
|
#if OS_TASK_NAME_EN > 0u
|
1103 |
|
|
INT8U OSTaskNameGet (INT8U prio,
|
1104 |
|
|
INT8U **pname,
|
1105 |
|
|
INT8U *perr);
|
1106 |
|
|
|
1107 |
|
|
void OSTaskNameSet (INT8U prio,
|
1108 |
|
|
INT8U *pname,
|
1109 |
|
|
INT8U *perr);
|
1110 |
|
|
#endif
|
1111 |
|
|
|
1112 |
|
|
#if OS_TASK_SUSPEND_EN > 0u
|
1113 |
|
|
INT8U OSTaskResume (INT8U prio);
|
1114 |
|
|
INT8U OSTaskSuspend (INT8U prio);
|
1115 |
|
|
#endif
|
1116 |
|
|
|
1117 |
|
|
#if (OS_TASK_STAT_STK_CHK_EN > 0u) && (OS_TASK_CREATE_EXT_EN > 0u)
|
1118 |
|
|
INT8U OSTaskStkChk (INT8U prio,
|
1119 |
|
|
OS_STK_DATA *p_stk_data);
|
1120 |
|
|
#endif
|
1121 |
|
|
|
1122 |
|
|
#if OS_TASK_QUERY_EN > 0u
|
1123 |
|
|
INT8U OSTaskQuery (INT8U prio,
|
1124 |
|
|
OS_TCB *p_task_data);
|
1125 |
|
|
#endif
|
1126 |
|
|
|
1127 |
|
|
|
1128 |
|
|
|
1129 |
|
|
#if OS_TASK_REG_TBL_SIZE > 0u
|
1130 |
|
|
INT32U OSTaskRegGet (INT8U prio,
|
1131 |
|
|
INT8U id,
|
1132 |
|
|
INT8U *perr);
|
1133 |
|
|
|
1134 |
|
|
void OSTaskRegSet (INT8U prio,
|
1135 |
|
|
INT8U id,
|
1136 |
|
|
INT32U value,
|
1137 |
|
|
INT8U *perr);
|
1138 |
|
|
#endif
|
1139 |
|
|
|
1140 |
|
|
/*$PAGE*/
|
1141 |
|
|
/*
|
1142 |
|
|
*********************************************************************************************************
|
1143 |
|
|
* TIME MANAGEMENT
|
1144 |
|
|
*********************************************************************************************************
|
1145 |
|
|
*/
|
1146 |
|
|
|
1147 |
|
|
void OSTimeDly (INT32U ticks);
|
1148 |
|
|
|
1149 |
|
|
#if OS_TIME_DLY_HMSM_EN > 0u
|
1150 |
|
|
INT8U OSTimeDlyHMSM (INT8U hours,
|
1151 |
|
|
INT8U minutes,
|
1152 |
|
|
INT8U seconds,
|
1153 |
|
|
INT16U ms);
|
1154 |
|
|
#endif
|
1155 |
|
|
|
1156 |
|
|
#if OS_TIME_DLY_RESUME_EN > 0u
|
1157 |
|
|
INT8U OSTimeDlyResume (INT8U prio);
|
1158 |
|
|
#endif
|
1159 |
|
|
|
1160 |
|
|
#if OS_TIME_GET_SET_EN > 0u
|
1161 |
|
|
INT32U OSTimeGet (void);
|
1162 |
|
|
void OSTimeSet (INT32U ticks);
|
1163 |
|
|
#endif
|
1164 |
|
|
|
1165 |
|
|
void OSTimeTick (void);
|
1166 |
|
|
|
1167 |
|
|
/*
|
1168 |
|
|
*********************************************************************************************************
|
1169 |
|
|
* TIMER MANAGEMENT
|
1170 |
|
|
*********************************************************************************************************
|
1171 |
|
|
*/
|
1172 |
|
|
|
1173 |
|
|
#if OS_TMR_EN > 0u
|
1174 |
|
|
OS_TMR *OSTmrCreate (INT32U dly,
|
1175 |
|
|
INT32U period,
|
1176 |
|
|
INT8U opt,
|
1177 |
|
|
OS_TMR_CALLBACK callback,
|
1178 |
|
|
void *callback_arg,
|
1179 |
|
|
INT8U *pname,
|
1180 |
|
|
INT8U *perr);
|
1181 |
|
|
|
1182 |
|
|
BOOLEAN OSTmrDel (OS_TMR *ptmr,
|
1183 |
|
|
INT8U *perr);
|
1184 |
|
|
|
1185 |
|
|
#if OS_TMR_CFG_NAME_EN > 0u
|
1186 |
|
|
INT8U OSTmrNameGet (OS_TMR *ptmr,
|
1187 |
|
|
INT8U **pdest,
|
1188 |
|
|
INT8U *perr);
|
1189 |
|
|
#endif
|
1190 |
|
|
INT32U OSTmrRemainGet (OS_TMR *ptmr,
|
1191 |
|
|
INT8U *perr);
|
1192 |
|
|
|
1193 |
|
|
INT8U OSTmrStateGet (OS_TMR *ptmr,
|
1194 |
|
|
INT8U *perr);
|
1195 |
|
|
|
1196 |
|
|
BOOLEAN OSTmrStart (OS_TMR *ptmr,
|
1197 |
|
|
INT8U *perr);
|
1198 |
|
|
|
1199 |
|
|
BOOLEAN OSTmrStop (OS_TMR *ptmr,
|
1200 |
|
|
INT8U opt,
|
1201 |
|
|
void *callback_arg,
|
1202 |
|
|
INT8U *perr);
|
1203 |
|
|
|
1204 |
|
|
INT8U OSTmrSignal (void);
|
1205 |
|
|
#endif
|
1206 |
|
|
|
1207 |
|
|
/*
|
1208 |
|
|
*********************************************************************************************************
|
1209 |
|
|
* MISCELLANEOUS
|
1210 |
|
|
*********************************************************************************************************
|
1211 |
|
|
*/
|
1212 |
|
|
|
1213 |
|
|
void OSInit (void);
|
1214 |
|
|
|
1215 |
|
|
void OSIntEnter (void);
|
1216 |
|
|
void OSIntExit (void);
|
1217 |
|
|
|
1218 |
|
|
#ifdef OS_SAFETY_CRITICAL_IEC61508
|
1219 |
|
|
void OSSafetyCriticalStart (void);
|
1220 |
|
|
#endif
|
1221 |
|
|
|
1222 |
|
|
#if OS_SCHED_LOCK_EN > 0u
|
1223 |
|
|
void OSSchedLock (void);
|
1224 |
|
|
void OSSchedUnlock (void);
|
1225 |
|
|
#endif
|
1226 |
|
|
|
1227 |
|
|
void OSStart (void);
|
1228 |
|
|
|
1229 |
|
|
void OSStatInit (void);
|
1230 |
|
|
|
1231 |
|
|
INT16U OSVersion (void);
|
1232 |
|
|
|
1233 |
|
|
/*$PAGE*/
|
1234 |
|
|
/*
|
1235 |
|
|
*********************************************************************************************************
|
1236 |
|
|
* INTERNAL FUNCTION PROTOTYPES
|
1237 |
|
|
* (Your application MUST NOT call these functions)
|
1238 |
|
|
*********************************************************************************************************
|
1239 |
|
|
*/
|
1240 |
|
|
|
1241 |
|
|
#if OS_TASK_DEL_EN > 0u
|
1242 |
|
|
void OS_Dummy (void);
|
1243 |
|
|
#endif
|
1244 |
|
|
|
1245 |
|
|
#if (OS_EVENT_EN)
|
1246 |
|
|
INT8U OS_EventTaskRdy (OS_EVENT *pevent,
|
1247 |
|
|
void *pmsg,
|
1248 |
|
|
INT8U msk,
|
1249 |
|
|
INT8U pend_stat);
|
1250 |
|
|
|
1251 |
|
|
void OS_EventTaskWait (OS_EVENT *pevent);
|
1252 |
|
|
|
1253 |
|
|
void OS_EventTaskRemove (OS_TCB *ptcb,
|
1254 |
|
|
OS_EVENT *pevent);
|
1255 |
|
|
|
1256 |
|
|
#if (OS_EVENT_MULTI_EN > 0u)
|
1257 |
|
|
void OS_EventTaskWaitMulti (OS_EVENT **pevents_wait);
|
1258 |
|
|
|
1259 |
|
|
void OS_EventTaskRemoveMulti (OS_TCB *ptcb,
|
1260 |
|
|
OS_EVENT **pevents_multi);
|
1261 |
|
|
#endif
|
1262 |
|
|
|
1263 |
|
|
void OS_EventWaitListInit (OS_EVENT *pevent);
|
1264 |
|
|
#endif
|
1265 |
|
|
|
1266 |
|
|
#if (OS_FLAG_EN > 0u) && (OS_MAX_FLAGS > 0u)
|
1267 |
|
|
void OS_FlagInit (void);
|
1268 |
|
|
void OS_FlagUnlink (OS_FLAG_NODE *pnode);
|
1269 |
|
|
#endif
|
1270 |
|
|
|
1271 |
|
|
void OS_MemClr (INT8U *pdest,
|
1272 |
|
|
INT16U size);
|
1273 |
|
|
|
1274 |
|
|
void OS_MemCopy (INT8U *pdest,
|
1275 |
|
|
INT8U *psrc,
|
1276 |
|
|
INT16U size);
|
1277 |
|
|
|
1278 |
|
|
#if (OS_MEM_EN > 0u) && (OS_MAX_MEM_PART > 0u)
|
1279 |
|
|
void OS_MemInit (void);
|
1280 |
|
|
#endif
|
1281 |
|
|
|
1282 |
|
|
#if OS_Q_EN > 0u
|
1283 |
|
|
void OS_QInit (void);
|
1284 |
|
|
#endif
|
1285 |
|
|
|
1286 |
|
|
void OS_Sched (void);
|
1287 |
|
|
|
1288 |
|
|
#if (OS_EVENT_NAME_EN > 0u) || (OS_FLAG_NAME_EN > 0u) || (OS_MEM_NAME_EN > 0u) || (OS_TASK_NAME_EN > 0u)
|
1289 |
|
|
INT8U OS_StrLen (INT8U *psrc);
|
1290 |
|
|
#endif
|
1291 |
|
|
|
1292 |
|
|
void OS_TaskIdle (void *p_arg);
|
1293 |
|
|
|
1294 |
|
|
void OS_TaskReturn (void);
|
1295 |
|
|
|
1296 |
|
|
#if OS_TASK_STAT_EN > 0u
|
1297 |
|
|
void OS_TaskStat (void *p_arg);
|
1298 |
|
|
#endif
|
1299 |
|
|
|
1300 |
|
|
#if (OS_TASK_STAT_STK_CHK_EN > 0u) && (OS_TASK_CREATE_EXT_EN > 0u)
|
1301 |
|
|
void OS_TaskStkClr (OS_STK *pbos,
|
1302 |
|
|
INT32U size,
|
1303 |
|
|
INT16U opt);
|
1304 |
|
|
#endif
|
1305 |
|
|
|
1306 |
|
|
#if (OS_TASK_STAT_STK_CHK_EN > 0u) && (OS_TASK_CREATE_EXT_EN > 0u)
|
1307 |
|
|
void OS_TaskStatStkChk (void);
|
1308 |
|
|
#endif
|
1309 |
|
|
|
1310 |
|
|
INT8U OS_TCBInit (INT8U prio,
|
1311 |
|
|
OS_STK *ptos,
|
1312 |
|
|
OS_STK *pbos,
|
1313 |
|
|
INT16U id,
|
1314 |
|
|
INT32U stk_size,
|
1315 |
|
|
void *pext,
|
1316 |
|
|
INT16U opt);
|
1317 |
|
|
|
1318 |
|
|
#if OS_TMR_EN > 0u
|
1319 |
|
|
void OSTmr_Init (void);
|
1320 |
|
|
#endif
|
1321 |
|
|
|
1322 |
|
|
/*$PAGE*/
|
1323 |
|
|
/*
|
1324 |
|
|
*********************************************************************************************************
|
1325 |
|
|
* FUNCTION PROTOTYPES
|
1326 |
|
|
* (Target Specific Functions)
|
1327 |
|
|
*********************************************************************************************************
|
1328 |
|
|
*/
|
1329 |
|
|
|
1330 |
|
|
#if OS_DEBUG_EN > 0u
|
1331 |
|
|
void OSDebugInit (void);
|
1332 |
|
|
#endif
|
1333 |
|
|
|
1334 |
|
|
void OSInitHookBegin (void);
|
1335 |
|
|
void OSInitHookEnd (void);
|
1336 |
|
|
|
1337 |
|
|
void OSTaskCreateHook (OS_TCB *ptcb);
|
1338 |
|
|
void OSTaskDelHook (OS_TCB *ptcb);
|
1339 |
|
|
|
1340 |
|
|
void OSTaskIdleHook (void);
|
1341 |
|
|
|
1342 |
|
|
void OSTaskReturnHook (OS_TCB *ptcb);
|
1343 |
|
|
|
1344 |
|
|
void OSTaskStatHook (void);
|
1345 |
|
|
OS_STK *OSTaskStkInit (void (*task)(void *p_arg),
|
1346 |
|
|
void *p_arg,
|
1347 |
|
|
OS_STK *ptos,
|
1348 |
|
|
INT16U opt);
|
1349 |
|
|
|
1350 |
|
|
#if OS_TASK_SW_HOOK_EN > 0u
|
1351 |
|
|
void OSTaskSwHook (void);
|
1352 |
|
|
#endif
|
1353 |
|
|
|
1354 |
|
|
void OSTCBInitHook (OS_TCB *ptcb);
|
1355 |
|
|
|
1356 |
|
|
#if OS_TIME_TICK_HOOK_EN > 0u
|
1357 |
|
|
void OSTimeTickHook (void);
|
1358 |
|
|
#endif
|
1359 |
|
|
|
1360 |
|
|
/*$PAGE*/
|
1361 |
|
|
/*
|
1362 |
|
|
*********************************************************************************************************
|
1363 |
|
|
* FUNCTION PROTOTYPES
|
1364 |
|
|
* (Application Specific Functions)
|
1365 |
|
|
*********************************************************************************************************
|
1366 |
|
|
*/
|
1367 |
|
|
|
1368 |
|
|
#if OS_APP_HOOKS_EN > 0u
|
1369 |
|
|
void App_TaskCreateHook (OS_TCB *ptcb);
|
1370 |
|
|
void App_TaskDelHook (OS_TCB *ptcb);
|
1371 |
|
|
void App_TaskIdleHook (void);
|
1372 |
|
|
|
1373 |
|
|
void App_TaskReturnHook (OS_TCB *ptcb);
|
1374 |
|
|
|
1375 |
|
|
void App_TaskStatHook (void);
|
1376 |
|
|
|
1377 |
|
|
#if OS_TASK_SW_HOOK_EN > 0u
|
1378 |
|
|
void App_TaskSwHook (void);
|
1379 |
|
|
#endif
|
1380 |
|
|
|
1381 |
|
|
void App_TCBInitHook (OS_TCB *ptcb);
|
1382 |
|
|
|
1383 |
|
|
#if OS_TIME_TICK_HOOK_EN > 0u
|
1384 |
|
|
void App_TimeTickHook (void);
|
1385 |
|
|
#endif
|
1386 |
|
|
#endif
|
1387 |
|
|
|
1388 |
|
|
/*
|
1389 |
|
|
*********************************************************************************************************
|
1390 |
|
|
* FUNCTION PROTOTYPES
|
1391 |
|
|
*
|
1392 |
|
|
* IMPORTANT: These prototypes MUST be placed in OS_CPU.H
|
1393 |
|
|
*********************************************************************************************************
|
1394 |
|
|
*/
|
1395 |
|
|
|
1396 |
|
|
#if 0
|
1397 |
|
|
void OSStartHighRdy (void);
|
1398 |
|
|
void OSIntCtxSw (void);
|
1399 |
|
|
void OSCtxSw (void);
|
1400 |
|
|
#endif
|
1401 |
|
|
|
1402 |
|
|
/*$PAGE*/
|
1403 |
|
|
/*
|
1404 |
|
|
*********************************************************************************************************
|
1405 |
|
|
* LOOK FOR MISSING #define CONSTANTS
|
1406 |
|
|
*
|
1407 |
|
|
* This section is used to generate ERROR messages at compile time if certain #define constants are
|
1408 |
|
|
* MISSING in OS_CFG.H. This allows you to quickly determine the source of the error.
|
1409 |
|
|
*
|
1410 |
|
|
* You SHOULD NOT change this section UNLESS you would like to add more comments as to the source of the
|
1411 |
|
|
* compile time error.
|
1412 |
|
|
*********************************************************************************************************
|
1413 |
|
|
*/
|
1414 |
|
|
|
1415 |
|
|
/*
|
1416 |
|
|
*********************************************************************************************************
|
1417 |
|
|
* EVENT FLAGS
|
1418 |
|
|
*********************************************************************************************************
|
1419 |
|
|
*/
|
1420 |
|
|
|
1421 |
|
|
#ifndef OS_FLAG_EN
|
1422 |
|
|
#error "OS_CFG.H, Missing OS_FLAG_EN: Enable (1) or Disable (0) code generation for Event Flags"
|
1423 |
|
|
#else
|
1424 |
|
|
#ifndef OS_MAX_FLAGS
|
1425 |
|
|
#error "OS_CFG.H, Missing OS_MAX_FLAGS: Max. number of Event Flag Groups in your application"
|
1426 |
|
|
#else
|
1427 |
|
|
#if OS_MAX_FLAGS > 65500u
|
1428 |
|
|
#error "OS_CFG.H, OS_MAX_FLAGS must be <= 65500"
|
1429 |
|
|
#endif
|
1430 |
|
|
#endif
|
1431 |
|
|
|
1432 |
|
|
#ifndef OS_FLAGS_NBITS
|
1433 |
|
|
#error "OS_CFG.H, Missing OS_FLAGS_NBITS: Determine #bits used for event flags, MUST be either 8, 16 or 32"
|
1434 |
|
|
#endif
|
1435 |
|
|
|
1436 |
|
|
#ifndef OS_FLAG_WAIT_CLR_EN
|
1437 |
|
|
#error "OS_CFG.H, Missing OS_FLAG_WAIT_CLR_EN: Include code for Wait on Clear EVENT FLAGS"
|
1438 |
|
|
#endif
|
1439 |
|
|
|
1440 |
|
|
#ifndef OS_FLAG_ACCEPT_EN
|
1441 |
|
|
#error "OS_CFG.H, Missing OS_FLAG_ACCEPT_EN: Include code for OSFlagAccept()"
|
1442 |
|
|
#endif
|
1443 |
|
|
|
1444 |
|
|
#ifndef OS_FLAG_DEL_EN
|
1445 |
|
|
#error "OS_CFG.H, Missing OS_FLAG_DEL_EN: Include code for OSFlagDel()"
|
1446 |
|
|
#endif
|
1447 |
|
|
|
1448 |
|
|
#ifndef OS_FLAG_NAME_EN
|
1449 |
|
|
#error "OS_CFG.H, Missing OS_FLAG_NAME_EN: Enable flag group names"
|
1450 |
|
|
#endif
|
1451 |
|
|
|
1452 |
|
|
#ifndef OS_FLAG_QUERY_EN
|
1453 |
|
|
#error "OS_CFG.H, Missing OS_FLAG_QUERY_EN: Include code for OSFlagQuery()"
|
1454 |
|
|
#endif
|
1455 |
|
|
#endif
|
1456 |
|
|
|
1457 |
|
|
/*
|
1458 |
|
|
*********************************************************************************************************
|
1459 |
|
|
* MESSAGE MAILBOXES
|
1460 |
|
|
*********************************************************************************************************
|
1461 |
|
|
*/
|
1462 |
|
|
|
1463 |
|
|
#ifndef OS_MBOX_EN
|
1464 |
|
|
#error "OS_CFG.H, Missing OS_MBOX_EN: Enable (1) or Disable (0) code generation for MAILBOXES"
|
1465 |
|
|
#else
|
1466 |
|
|
#ifndef OS_MBOX_ACCEPT_EN
|
1467 |
|
|
#error "OS_CFG.H, Missing OS_MBOX_ACCEPT_EN: Include code for OSMboxAccept()"
|
1468 |
|
|
#endif
|
1469 |
|
|
|
1470 |
|
|
#ifndef OS_MBOX_DEL_EN
|
1471 |
|
|
#error "OS_CFG.H, Missing OS_MBOX_DEL_EN: Include code for OSMboxDel()"
|
1472 |
|
|
#endif
|
1473 |
|
|
|
1474 |
|
|
#ifndef OS_MBOX_PEND_ABORT_EN
|
1475 |
|
|
#error "OS_CFG.H, Missing OS_MBOX_PEND_ABORT_EN: Include code for OSMboxPendAbort()"
|
1476 |
|
|
#endif
|
1477 |
|
|
|
1478 |
|
|
#ifndef OS_MBOX_POST_EN
|
1479 |
|
|
#error "OS_CFG.H, Missing OS_MBOX_POST_EN: Include code for OSMboxPost()"
|
1480 |
|
|
#endif
|
1481 |
|
|
|
1482 |
|
|
#ifndef OS_MBOX_POST_OPT_EN
|
1483 |
|
|
#error "OS_CFG.H, Missing OS_MBOX_POST_OPT_EN: Include code for OSMboxPostOpt()"
|
1484 |
|
|
#endif
|
1485 |
|
|
|
1486 |
|
|
#ifndef OS_MBOX_QUERY_EN
|
1487 |
|
|
#error "OS_CFG.H, Missing OS_MBOX_QUERY_EN: Include code for OSMboxQuery()"
|
1488 |
|
|
#endif
|
1489 |
|
|
#endif
|
1490 |
|
|
|
1491 |
|
|
/*
|
1492 |
|
|
*********************************************************************************************************
|
1493 |
|
|
* MEMORY MANAGEMENT
|
1494 |
|
|
*********************************************************************************************************
|
1495 |
|
|
*/
|
1496 |
|
|
|
1497 |
|
|
#ifndef OS_MEM_EN
|
1498 |
|
|
#error "OS_CFG.H, Missing OS_MEM_EN: Enable (1) or Disable (0) code generation for MEMORY MANAGER"
|
1499 |
|
|
#else
|
1500 |
|
|
#ifndef OS_MAX_MEM_PART
|
1501 |
|
|
#error "OS_CFG.H, Missing OS_MAX_MEM_PART: Max. number of memory partitions"
|
1502 |
|
|
#else
|
1503 |
|
|
#if OS_MAX_MEM_PART > 65500u
|
1504 |
|
|
#error "OS_CFG.H, OS_MAX_MEM_PART must be <= 65500"
|
1505 |
|
|
#endif
|
1506 |
|
|
#endif
|
1507 |
|
|
|
1508 |
|
|
#ifndef OS_MEM_NAME_EN
|
1509 |
|
|
#error "OS_CFG.H, Missing OS_MEM_NAME_EN: Enable memory partition names"
|
1510 |
|
|
#endif
|
1511 |
|
|
|
1512 |
|
|
#ifndef OS_MEM_QUERY_EN
|
1513 |
|
|
#error "OS_CFG.H, Missing OS_MEM_QUERY_EN: Include code for OSMemQuery()"
|
1514 |
|
|
#endif
|
1515 |
|
|
#endif
|
1516 |
|
|
|
1517 |
|
|
/*
|
1518 |
|
|
*********************************************************************************************************
|
1519 |
|
|
* MUTUAL EXCLUSION SEMAPHORES
|
1520 |
|
|
*********************************************************************************************************
|
1521 |
|
|
*/
|
1522 |
|
|
|
1523 |
|
|
#ifndef OS_MUTEX_EN
|
1524 |
|
|
#error "OS_CFG.H, Missing OS_MUTEX_EN: Enable (1) or Disable (0) code generation for MUTEX"
|
1525 |
|
|
#else
|
1526 |
|
|
#ifndef OS_MUTEX_ACCEPT_EN
|
1527 |
|
|
#error "OS_CFG.H, Missing OS_MUTEX_ACCEPT_EN: Include code for OSMutexAccept()"
|
1528 |
|
|
#endif
|
1529 |
|
|
|
1530 |
|
|
#ifndef OS_MUTEX_DEL_EN
|
1531 |
|
|
#error "OS_CFG.H, Missing OS_MUTEX_DEL_EN: Include code for OSMutexDel()"
|
1532 |
|
|
#endif
|
1533 |
|
|
|
1534 |
|
|
#ifndef OS_MUTEX_QUERY_EN
|
1535 |
|
|
#error "OS_CFG.H, Missing OS_MUTEX_QUERY_EN: Include code for OSMutexQuery()"
|
1536 |
|
|
#endif
|
1537 |
|
|
#endif
|
1538 |
|
|
|
1539 |
|
|
/*
|
1540 |
|
|
*********************************************************************************************************
|
1541 |
|
|
* MESSAGE QUEUES
|
1542 |
|
|
*********************************************************************************************************
|
1543 |
|
|
*/
|
1544 |
|
|
|
1545 |
|
|
#ifndef OS_Q_EN
|
1546 |
|
|
#error "OS_CFG.H, Missing OS_Q_EN: Enable (1) or Disable (0) code generation for QUEUES"
|
1547 |
|
|
#else
|
1548 |
|
|
#ifndef OS_MAX_QS
|
1549 |
|
|
#error "OS_CFG.H, Missing OS_MAX_QS: Max. number of queue control blocks"
|
1550 |
|
|
#else
|
1551 |
|
|
#if OS_MAX_QS > 65500u
|
1552 |
|
|
#error "OS_CFG.H, OS_MAX_QS must be <= 65500"
|
1553 |
|
|
#endif
|
1554 |
|
|
#endif
|
1555 |
|
|
|
1556 |
|
|
#ifndef OS_Q_ACCEPT_EN
|
1557 |
|
|
#error "OS_CFG.H, Missing OS_Q_ACCEPT_EN: Include code for OSQAccept()"
|
1558 |
|
|
#endif
|
1559 |
|
|
|
1560 |
|
|
#ifndef OS_Q_DEL_EN
|
1561 |
|
|
#error "OS_CFG.H, Missing OS_Q_DEL_EN: Include code for OSQDel()"
|
1562 |
|
|
#endif
|
1563 |
|
|
|
1564 |
|
|
#ifndef OS_Q_FLUSH_EN
|
1565 |
|
|
#error "OS_CFG.H, Missing OS_Q_FLUSH_EN: Include code for OSQFlush()"
|
1566 |
|
|
#endif
|
1567 |
|
|
|
1568 |
|
|
#ifndef OS_Q_PEND_ABORT_EN
|
1569 |
|
|
#error "OS_CFG.H, Missing OS_Q_PEND_ABORT_EN: Include code for OSQPendAbort()"
|
1570 |
|
|
#endif
|
1571 |
|
|
|
1572 |
|
|
#ifndef OS_Q_POST_EN
|
1573 |
|
|
#error "OS_CFG.H, Missing OS_Q_POST_EN: Include code for OSQPost()"
|
1574 |
|
|
#endif
|
1575 |
|
|
|
1576 |
|
|
#ifndef OS_Q_POST_FRONT_EN
|
1577 |
|
|
#error "OS_CFG.H, Missing OS_Q_POST_FRONT_EN: Include code for OSQPostFront()"
|
1578 |
|
|
#endif
|
1579 |
|
|
|
1580 |
|
|
#ifndef OS_Q_POST_OPT_EN
|
1581 |
|
|
#error "OS_CFG.H, Missing OS_Q_POST_OPT_EN: Include code for OSQPostOpt()"
|
1582 |
|
|
#endif
|
1583 |
|
|
|
1584 |
|
|
#ifndef OS_Q_QUERY_EN
|
1585 |
|
|
#error "OS_CFG.H, Missing OS_Q_QUERY_EN: Include code for OSQQuery()"
|
1586 |
|
|
#endif
|
1587 |
|
|
#endif
|
1588 |
|
|
|
1589 |
|
|
/*
|
1590 |
|
|
*********************************************************************************************************
|
1591 |
|
|
* SEMAPHORES
|
1592 |
|
|
*********************************************************************************************************
|
1593 |
|
|
*/
|
1594 |
|
|
|
1595 |
|
|
#ifndef OS_SEM_EN
|
1596 |
|
|
#error "OS_CFG.H, Missing OS_SEM_EN: Enable (1) or Disable (0) code generation for SEMAPHORES"
|
1597 |
|
|
#else
|
1598 |
|
|
#ifndef OS_SEM_ACCEPT_EN
|
1599 |
|
|
#error "OS_CFG.H, Missing OS_SEM_ACCEPT_EN: Include code for OSSemAccept()"
|
1600 |
|
|
#endif
|
1601 |
|
|
|
1602 |
|
|
#ifndef OS_SEM_DEL_EN
|
1603 |
|
|
#error "OS_CFG.H, Missing OS_SEM_DEL_EN: Include code for OSSemDel()"
|
1604 |
|
|
#endif
|
1605 |
|
|
|
1606 |
|
|
#ifndef OS_SEM_PEND_ABORT_EN
|
1607 |
|
|
#error "OS_CFG.H, Missing OS_SEM_PEND_ABORT_EN: Include code for OSSemPendAbort()"
|
1608 |
|
|
#endif
|
1609 |
|
|
|
1610 |
|
|
#ifndef OS_SEM_QUERY_EN
|
1611 |
|
|
#error "OS_CFG.H, Missing OS_SEM_QUERY_EN: Include code for OSSemQuery()"
|
1612 |
|
|
#endif
|
1613 |
|
|
|
1614 |
|
|
#ifndef OS_SEM_SET_EN
|
1615 |
|
|
#error "OS_CFG.H, Missing OS_SEM_SET_EN: Include code for OSSemSet()"
|
1616 |
|
|
#endif
|
1617 |
|
|
#endif
|
1618 |
|
|
|
1619 |
|
|
/*
|
1620 |
|
|
*********************************************************************************************************
|
1621 |
|
|
* TASK MANAGEMENT
|
1622 |
|
|
*********************************************************************************************************
|
1623 |
|
|
*/
|
1624 |
|
|
|
1625 |
|
|
#ifndef OS_MAX_TASKS
|
1626 |
|
|
#error "OS_CFG.H, Missing OS_MAX_TASKS: Max. number of tasks in your application"
|
1627 |
|
|
#else
|
1628 |
|
|
#if OS_MAX_TASKS < 2u
|
1629 |
|
|
#error "OS_CFG.H, OS_MAX_TASKS must be >= 2"
|
1630 |
|
|
#endif
|
1631 |
|
|
|
1632 |
|
|
#if OS_MAX_TASKS > ((OS_LOWEST_PRIO - OS_N_SYS_TASKS) + 1u)
|
1633 |
|
|
#error "OS_CFG.H, OS_MAX_TASKS must be <= OS_LOWEST_PRIO - OS_N_SYS_TASKS + 1"
|
1634 |
|
|
#endif
|
1635 |
|
|
|
1636 |
|
|
#endif
|
1637 |
|
|
|
1638 |
|
|
#if OS_LOWEST_PRIO > 254u
|
1639 |
|
|
#error "OS_CFG.H, OS_LOWEST_PRIO must be <= 254 in V2.8x and higher"
|
1640 |
|
|
#endif
|
1641 |
|
|
|
1642 |
|
|
#ifndef OS_TASK_IDLE_STK_SIZE
|
1643 |
|
|
#error "OS_CFG.H, Missing OS_TASK_IDLE_STK_SIZE: Idle task stack size"
|
1644 |
|
|
#endif
|
1645 |
|
|
|
1646 |
|
|
#ifndef OS_TASK_STAT_EN
|
1647 |
|
|
#error "OS_CFG.H, Missing OS_TASK_STAT_EN: Enable (1) or Disable(0) the statistics task"
|
1648 |
|
|
#endif
|
1649 |
|
|
|
1650 |
|
|
#ifndef OS_TASK_STAT_STK_SIZE
|
1651 |
|
|
#error "OS_CFG.H, Missing OS_TASK_STAT_STK_SIZE: Statistics task stack size"
|
1652 |
|
|
#endif
|
1653 |
|
|
|
1654 |
|
|
#ifndef OS_TASK_STAT_STK_CHK_EN
|
1655 |
|
|
#error "OS_CFG.H, Missing OS_TASK_STAT_STK_CHK_EN: Check task stacks from statistics task"
|
1656 |
|
|
#endif
|
1657 |
|
|
|
1658 |
|
|
#ifndef OS_TASK_CHANGE_PRIO_EN
|
1659 |
|
|
#error "OS_CFG.H, Missing OS_TASK_CHANGE_PRIO_EN: Include code for OSTaskChangePrio()"
|
1660 |
|
|
#endif
|
1661 |
|
|
|
1662 |
|
|
#ifndef OS_TASK_CREATE_EN
|
1663 |
|
|
#error "OS_CFG.H, Missing OS_TASK_CREATE_EN: Include code for OSTaskCreate()"
|
1664 |
|
|
#endif
|
1665 |
|
|
|
1666 |
|
|
#ifndef OS_TASK_CREATE_EXT_EN
|
1667 |
|
|
#error "OS_CFG.H, Missing OS_TASK_CREATE_EXT_EN: Include code for OSTaskCreateExt()"
|
1668 |
|
|
#endif
|
1669 |
|
|
|
1670 |
|
|
#ifndef OS_TASK_DEL_EN
|
1671 |
|
|
#error "OS_CFG.H, Missing OS_TASK_DEL_EN: Include code for OSTaskDel()"
|
1672 |
|
|
#endif
|
1673 |
|
|
|
1674 |
|
|
#ifndef OS_TASK_NAME_EN
|
1675 |
|
|
#error "OS_CFG.H, Missing OS_TASK_NAME_EN: Enable task names"
|
1676 |
|
|
#endif
|
1677 |
|
|
|
1678 |
|
|
#ifndef OS_TASK_SUSPEND_EN
|
1679 |
|
|
#error "OS_CFG.H, Missing OS_TASK_SUSPEND_EN: Include code for OSTaskSuspend() and OSTaskResume()"
|
1680 |
|
|
#endif
|
1681 |
|
|
|
1682 |
|
|
#ifndef OS_TASK_QUERY_EN
|
1683 |
|
|
#error "OS_CFG.H, Missing OS_TASK_QUERY_EN: Include code for OSTaskQuery()"
|
1684 |
|
|
#endif
|
1685 |
|
|
|
1686 |
|
|
#ifndef OS_TASK_REG_TBL_SIZE
|
1687 |
|
|
#error "OS_CFG.H, Missing OS_TASK_REG_TBL_SIZE: Include code for task specific registers"
|
1688 |
|
|
#else
|
1689 |
|
|
#if OS_TASK_REG_TBL_SIZE > 255u
|
1690 |
|
|
#error "OS_CFG.H, OS_TASK_REG_TBL_SIZE must be <= 255"
|
1691 |
|
|
#endif
|
1692 |
|
|
#endif
|
1693 |
|
|
|
1694 |
|
|
/*
|
1695 |
|
|
*********************************************************************************************************
|
1696 |
|
|
* TIME MANAGEMENT
|
1697 |
|
|
*********************************************************************************************************
|
1698 |
|
|
*/
|
1699 |
|
|
|
1700 |
|
|
#ifndef OS_TICKS_PER_SEC
|
1701 |
|
|
#error "OS_CFG.H, Missing OS_TICKS_PER_SEC: Sets the number of ticks in one second"
|
1702 |
|
|
#endif
|
1703 |
|
|
|
1704 |
|
|
#ifndef OS_TIME_DLY_HMSM_EN
|
1705 |
|
|
#error "OS_CFG.H, Missing OS_TIME_DLY_HMSM_EN: Include code for OSTimeDlyHMSM()"
|
1706 |
|
|
#endif
|
1707 |
|
|
|
1708 |
|
|
#ifndef OS_TIME_DLY_RESUME_EN
|
1709 |
|
|
#error "OS_CFG.H, Missing OS_TIME_DLY_RESUME_EN: Include code for OSTimeDlyResume()"
|
1710 |
|
|
#endif
|
1711 |
|
|
|
1712 |
|
|
#ifndef OS_TIME_GET_SET_EN
|
1713 |
|
|
#error "OS_CFG.H, Missing OS_TIME_GET_SET_EN: Include code for OSTimeGet() and OSTimeSet()"
|
1714 |
|
|
#endif
|
1715 |
|
|
|
1716 |
|
|
/*
|
1717 |
|
|
*********************************************************************************************************
|
1718 |
|
|
* TIMER MANAGEMENT
|
1719 |
|
|
*********************************************************************************************************
|
1720 |
|
|
*/
|
1721 |
|
|
|
1722 |
|
|
#ifndef OS_TMR_EN
|
1723 |
|
|
#error "OS_CFG.H, Missing OS_TMR_EN: When (1) enables code generation for Timer Management"
|
1724 |
|
|
#elif OS_TMR_EN > 0u
|
1725 |
|
|
#if OS_SEM_EN == 0u
|
1726 |
|
|
#error "OS_CFG.H, Semaphore management is required (set OS_SEM_EN to 1) when enabling Timer Management."
|
1727 |
|
|
#error " Timer management require TWO semaphores."
|
1728 |
|
|
#endif
|
1729 |
|
|
|
1730 |
|
|
#ifndef OS_TMR_CFG_MAX
|
1731 |
|
|
#error "OS_CFG.H, Missing OS_TMR_CFG_MAX: Determines the total number of timers in an application (2 .. 65500)"
|
1732 |
|
|
#else
|
1733 |
|
|
#if OS_TMR_CFG_MAX < 2u
|
1734 |
|
|
#error "OS_CFG.H, OS_TMR_CFG_MAX should be between 2 and 65500"
|
1735 |
|
|
#endif
|
1736 |
|
|
|
1737 |
|
|
#if OS_TMR_CFG_MAX > 65500u
|
1738 |
|
|
#error "OS_CFG.H, OS_TMR_CFG_MAX should be between 2 and 65500"
|
1739 |
|
|
#endif
|
1740 |
|
|
#endif
|
1741 |
|
|
|
1742 |
|
|
#ifndef OS_TMR_CFG_WHEEL_SIZE
|
1743 |
|
|
#error "OS_CFG.H, Missing OS_TMR_CFG_WHEEL_SIZE: Sets the size of the timer wheel (1 .. 1023)"
|
1744 |
|
|
#else
|
1745 |
|
|
#if OS_TMR_CFG_WHEEL_SIZE < 2u
|
1746 |
|
|
#error "OS_CFG.H, OS_TMR_CFG_WHEEL_SIZE should be between 2 and 1024"
|
1747 |
|
|
#endif
|
1748 |
|
|
|
1749 |
|
|
#if OS_TMR_CFG_WHEEL_SIZE > 1024u
|
1750 |
|
|
#error "OS_CFG.H, OS_TMR_CFG_WHEEL_SIZE should be between 2 and 1024"
|
1751 |
|
|
#endif
|
1752 |
|
|
#endif
|
1753 |
|
|
|
1754 |
|
|
#ifndef OS_TMR_CFG_NAME_EN
|
1755 |
|
|
#error "OS_CFG.H, Missing OS_TMR_CFG_NAME_EN: Enable Timer names"
|
1756 |
|
|
#endif
|
1757 |
|
|
|
1758 |
|
|
#ifndef OS_TMR_CFG_TICKS_PER_SEC
|
1759 |
|
|
#error "OS_CFG.H, Missing OS_TMR_CFG_TICKS_PER_SEC: Determines the rate at which tiem timer management task will run (Hz)"
|
1760 |
|
|
#endif
|
1761 |
|
|
|
1762 |
|
|
#ifndef OS_TASK_TMR_STK_SIZE
|
1763 |
|
|
#error "OS_CFG.H, Missing OS_TASK_TMR_STK_SIZE: Determines the size of the Timer Task's stack"
|
1764 |
|
|
#endif
|
1765 |
|
|
#endif
|
1766 |
|
|
|
1767 |
|
|
|
1768 |
|
|
/*
|
1769 |
|
|
*********************************************************************************************************
|
1770 |
|
|
* MISCELLANEOUS
|
1771 |
|
|
*********************************************************************************************************
|
1772 |
|
|
*/
|
1773 |
|
|
|
1774 |
|
|
#ifndef OS_ARG_CHK_EN
|
1775 |
|
|
#error "OS_CFG.H, Missing OS_ARG_CHK_EN: Enable (1) or Disable (0) argument checking"
|
1776 |
|
|
#endif
|
1777 |
|
|
|
1778 |
|
|
|
1779 |
|
|
#ifndef OS_CPU_HOOKS_EN
|
1780 |
|
|
#error "OS_CFG.H, Missing OS_CPU_HOOKS_EN: uC/OS-II hooks are found in the processor port files when 1"
|
1781 |
|
|
#endif
|
1782 |
|
|
|
1783 |
|
|
|
1784 |
|
|
#ifndef OS_APP_HOOKS_EN
|
1785 |
|
|
#error "OS_CFG.H, Missing OS_APP_HOOKS_EN: Application-defined hooks are called from the uC/OS-II hooks"
|
1786 |
|
|
#endif
|
1787 |
|
|
|
1788 |
|
|
|
1789 |
|
|
#ifndef OS_DEBUG_EN
|
1790 |
|
|
#error "OS_CFG.H, Missing OS_DEBUG_EN: Allows you to include variables for debugging or not"
|
1791 |
|
|
#endif
|
1792 |
|
|
|
1793 |
|
|
|
1794 |
|
|
#ifndef OS_LOWEST_PRIO
|
1795 |
|
|
#error "OS_CFG.H, Missing OS_LOWEST_PRIO: Defines the lowest priority that can be assigned"
|
1796 |
|
|
#endif
|
1797 |
|
|
|
1798 |
|
|
|
1799 |
|
|
#ifndef OS_MAX_EVENTS
|
1800 |
|
|
#error "OS_CFG.H, Missing OS_MAX_EVENTS: Max. number of event control blocks in your application"
|
1801 |
|
|
#else
|
1802 |
|
|
#if OS_MAX_EVENTS > 65500u
|
1803 |
|
|
#error "OS_CFG.H, OS_MAX_EVENTS must be <= 65500"
|
1804 |
|
|
#endif
|
1805 |
|
|
#endif
|
1806 |
|
|
|
1807 |
|
|
|
1808 |
|
|
#ifndef OS_SCHED_LOCK_EN
|
1809 |
|
|
#error "OS_CFG.H, Missing OS_SCHED_LOCK_EN: Include code for OSSchedLock() and OSSchedUnlock()"
|
1810 |
|
|
#endif
|
1811 |
|
|
|
1812 |
|
|
|
1813 |
|
|
#ifndef OS_EVENT_MULTI_EN
|
1814 |
|
|
#error "OS_CFG.H, Missing OS_EVENT_MULTI_EN: Include code for OSEventPendMulti()"
|
1815 |
|
|
#endif
|
1816 |
|
|
|
1817 |
|
|
|
1818 |
|
|
#ifndef OS_TASK_PROFILE_EN
|
1819 |
|
|
#error "OS_CFG.H, Missing OS_TASK_PROFILE_EN: Include data structure for run-time task profiling"
|
1820 |
|
|
#endif
|
1821 |
|
|
|
1822 |
|
|
|
1823 |
|
|
#ifndef OS_TASK_SW_HOOK_EN
|
1824 |
|
|
#error "OS_CFG.H, Missing OS_TASK_SW_HOOK_EN: Allows you to include the code for OSTaskSwHook() or not"
|
1825 |
|
|
#endif
|
1826 |
|
|
|
1827 |
|
|
|
1828 |
|
|
#ifndef OS_TICK_STEP_EN
|
1829 |
|
|
#error "OS_CFG.H, Missing OS_TICK_STEP_EN: Allows to 'step' one tick at a time with uC/OS-View"
|
1830 |
|
|
#endif
|
1831 |
|
|
|
1832 |
|
|
|
1833 |
|
|
#ifndef OS_TIME_TICK_HOOK_EN
|
1834 |
|
|
#error "OS_CFG.H, Missing OS_TIME_TICK_HOOK_EN: Allows you to include the code for OSTimeTickHook() or not"
|
1835 |
|
|
#endif
|
1836 |
|
|
|
1837 |
|
|
/*
|
1838 |
|
|
*********************************************************************************************************
|
1839 |
|
|
* SAFETY CRITICAL USE
|
1840 |
|
|
*********************************************************************************************************
|
1841 |
|
|
*/
|
1842 |
|
|
|
1843 |
|
|
#ifdef SAFETY_CRITICAL_RELEASE
|
1844 |
|
|
|
1845 |
|
|
#if OS_ARG_CHK_EN < 1u
|
1846 |
|
|
#error "OS_CFG.H, OS_ARG_CHK_EN must be enabled for safety-critical release code"
|
1847 |
|
|
#endif
|
1848 |
|
|
|
1849 |
|
|
#if OS_APP_HOOKS_EN > 0u
|
1850 |
|
|
#error "OS_CFG.H, OS_APP_HOOKS_EN must be disabled for safety-critical release code"
|
1851 |
|
|
#endif
|
1852 |
|
|
|
1853 |
|
|
#if OS_DEBUG_EN > 0u
|
1854 |
|
|
#error "OS_CFG.H, OS_DEBUG_EN must be disabled for safety-critical release code"
|
1855 |
|
|
#endif
|
1856 |
|
|
|
1857 |
|
|
#ifdef CANTATA
|
1858 |
|
|
#error "OS_CFG.H, CANTATA must be disabled for safety-critical release code"
|
1859 |
|
|
#endif
|
1860 |
|
|
|
1861 |
|
|
#ifdef OS_SCHED_LOCK_EN
|
1862 |
|
|
#error "OS_CFG.H, OS_SCHED_LOCK_EN must be disabled for safety-critical release code"
|
1863 |
|
|
#endif
|
1864 |
|
|
|
1865 |
|
|
#ifdef VSC_VALIDATION_MODE
|
1866 |
|
|
#error "OS_CFG.H, VSC_VALIDATION_MODE must be disabled for safety-critical release code"
|
1867 |
|
|
#endif
|
1868 |
|
|
|
1869 |
|
|
#if OS_TASK_STAT_EN > 0u
|
1870 |
|
|
#error "OS_CFG.H, OS_TASK_STAT_EN must be disabled for safety-critical release code"
|
1871 |
|
|
#endif
|
1872 |
|
|
|
1873 |
|
|
#if OS_TICK_STEP_EN > 0u
|
1874 |
|
|
#error "OS_CFG.H, OS_TICK_STEP_EN must be disabled for safety-critical release code"
|
1875 |
|
|
#endif
|
1876 |
|
|
|
1877 |
|
|
#if OS_FLAG_EN > 0u
|
1878 |
|
|
#if OS_FLAG_DEL_EN > 0
|
1879 |
|
|
#error "OS_CFG.H, OS_FLAG_DEL_EN must be disabled for safety-critical release code"
|
1880 |
|
|
#endif
|
1881 |
|
|
#endif
|
1882 |
|
|
|
1883 |
|
|
#if OS_MBOX_EN > 0u
|
1884 |
|
|
#if OS_MBOX_DEL_EN > 0u
|
1885 |
|
|
#error "OS_CFG.H, OS_MBOX_DEL_EN must be disabled for safety-critical release code"
|
1886 |
|
|
#endif
|
1887 |
|
|
#endif
|
1888 |
|
|
|
1889 |
|
|
#if OS_MUTEX_EN > 0u
|
1890 |
|
|
#if OS_MUTEX_DEL_EN > 0u
|
1891 |
|
|
#error "OS_CFG.H, OS_MUTEX_DEL_EN must be disabled for safety-critical release code"
|
1892 |
|
|
#endif
|
1893 |
|
|
#endif
|
1894 |
|
|
|
1895 |
|
|
#if OS_Q_EN > 0u
|
1896 |
|
|
#if OS_Q_DEL_EN > 0u
|
1897 |
|
|
#error "OS_CFG.H, OS_Q_DEL_EN must be disabled for safety-critical release code"
|
1898 |
|
|
#endif
|
1899 |
|
|
#endif
|
1900 |
|
|
|
1901 |
|
|
#if OS_SEM_EN > 0u
|
1902 |
|
|
#if OS_SEM_DEL_EN > 0u
|
1903 |
|
|
#error "OS_CFG.H, OS_SEM_DEL_EN must be disabled for safety-critical release code"
|
1904 |
|
|
#endif
|
1905 |
|
|
#endif
|
1906 |
|
|
|
1907 |
|
|
#if OS_TASK_EN > 0u
|
1908 |
|
|
#if OS_TASK_DEL_EN > 0u
|
1909 |
|
|
#error "OS_CFG.H, OS_TASK_DEL_EN must be disabled for safety-critical release code"
|
1910 |
|
|
#endif
|
1911 |
|
|
#endif
|
1912 |
|
|
|
1913 |
|
|
#if OS_CRITICAL_METHOD != 3u
|
1914 |
|
|
#error "OS_CPU.H, OS_CRITICAL_METHOD must be type 3 for safety-critical release code"
|
1915 |
|
|
#endif
|
1916 |
|
|
|
1917 |
|
|
#endif /* ------------------------ SAFETY_CRITICAL_RELEASE ------------------------ */
|
1918 |
|
|
|
1919 |
|
|
#ifdef __cplusplus
|
1920 |
|
|
}
|
1921 |
|
|
#endif
|
1922 |
|
|
|
1923 |
|
|
#endif
|
1924 |
|
|
|