source: asp_ewarm/asp-1.7.0/extension/dcre/kernel/check.h@ 61

Last change on this file since 61 was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

File size: 12.9 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
12 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
13 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
14 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
15 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
16 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
17 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
18 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
19ƒƒ“ƒgi—˜—p
20 * ŽÒƒ}ƒjƒ…
21ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
22 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
23 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
24 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
25 * ‚ƁD
26 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
27ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
28ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
29 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
30 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
31 * •ñ‚·‚邱‚ƁD
32 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
33 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
34 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
35 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
36 * –Ɛӂ·‚邱‚ƁD
37 *
38 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
39 * ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
40 * ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
41 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
42 * ‚̐ӔC‚𕉂í‚È‚¢D
43 *
44 * @(#) $Id: check.h 1970 2010-11-20 11:27:06Z ertl-hiro $
45 */
46
47/*
48 * ƒGƒ‰[ƒ`ƒFƒbƒN—pƒ}ƒNƒ
49 */
50
51#ifndef TOPPERS_CHECK_H
52#define TOPPERS_CHECK_H
53
54/*
55 * —\–ñ‘®«ƒGƒ‰[‚̃`ƒFƒbƒNiE_PARj
56 */
57#define CHECK_RSATR(atr, valid_atr) { \
58 if (((atr) & ~(valid_atr)) != 0U) { \
59 ercd = E_RSATR; \
60 goto error_exit; \
61 } \
62}
63
64/*
65 * —Dæ“x‚͈̔͂̔»’è
66 */
67#define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
68
69#define VALID_DPRI(dpri) (TMIN_DPRI <= (dpri) && (dpri) <= TMAX_DPRI)
70
71#define VALID_MPRI(mpri) (TMIN_MPRI <= (mpri) && (mpri) <= TMAX_MPRI)
72
73#define VALID_ISRPRI(isrpri) \
74 (TMIN_ISRPRI <= (isrpri) && (isrpri) <= TMAX_ISRPRI)
75
76#ifndef VALID_INTPRI_CHGIPM
77#define VALID_INTPRI_CHGIPM(intpri) \
78 (TMIN_INTPRI <= (intpri) && (intpri) <= TIPM_ENAALL)
79#endif /* VALID_INTPRI_CHGIPM */
80
81/*
82 * ƒ^ƒXƒN—Dæ“x‚̃`ƒFƒbƒNiE_PARj
83 */
84#define CHECK_TPRI(tpri) { \
85 if (!VALID_TPRI(tpri)) { \
86 ercd = E_PAR; \
87 goto error_exit; \
88 } \
89}
90
91#define CHECK_TPRI_INI(tpri) { \
92 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_INI)) { \
93 ercd = E_PAR; \
94 goto error_exit; \
95 } \
96}
97
98#define CHECK_TPRI_SELF(tpri) { \
99 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_SELF)) { \
100 ercd = E_PAR; \
101 goto error_exit; \
102 } \
103}
104
105/*
106 * ƒf[ƒ^—Dæ“x‚̃`ƒFƒbƒNiE_PARj
107 */
108#define CHECK_DPRI(dpri) { \
109 if (!VALID_DPRI(dpri)) { \
110 ercd = E_PAR; \
111 goto error_exit; \
112 } \
113}
114
115/*
116 * ƒƒbƒZ[ƒW—Dæ“x‚̃`ƒFƒbƒNiE_PARj
117 */
118#define CHECK_MPRI(mpri) { \
119 if (!VALID_MPRI(mpri)) { \
120 ercd = E_PAR; \
121 goto error_exit; \
122 } \
123}
124
125/*
126 * Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“—Dæ“x‚̃`ƒFƒbƒNiE_PARj
127 */
128#define CHECK_ISRPRI(isrpri) { \
129 if (!VALID_ISRPRI(isrpri)) { \
130 ercd = E_PAR; \
131 goto error_exit; \
132 } \
133}
134
135/*
136 * ƒ^ƒCƒ€ƒAƒEƒgŽw’è’l‚̃`ƒFƒbƒNiE_PARj
137 */
138#define CHECK_TMOUT(tmout) { \
139 if (!(TMO_FEVR <= (tmout))) { \
140 ercd = E_PAR; \
141 goto error_exit; \
142 } \
143}
144
145/*
146 * Š„ž‚Ý—Dæ“x‚̃`ƒFƒbƒNiE_PARj
147 */
148#define CHECK_INTPRI_CHGIPM(intpri) { \
149 if (!VALID_INTPRI_CHGIPM(intpri)) { \
150 ercd = E_PAR; \
151 goto error_exit; \
152 } \
153}
154
155/*
156 * Š„ž‚ݔԍ†‚̃`ƒFƒbƒNiE_PARj
157 */
158#define CHECK_INTNO_CREISR(intno) { \
159 if (!VALID_INTNO_CREISR(intno)) { \
160 ercd = E_PAR; \
161 goto error_exit; \
162 } \
163}
164
165#define CHECK_INTNO_DISINT(intno) { \
166 if (!VALID_INTNO_DISINT(intno)) { \
167 ercd = E_PAR; \
168 goto error_exit; \
169 } \
170}
171
172/*
173 * ƒAƒ‰ƒCƒ“‚µ‚Ä‚¢‚é‚©‚Ì”»’è
174 */
175#define ALIGNED(val, align) ((((uintptr_t)(val)) & ((align) - 1U)) == 0U)
176
177#ifdef CHECK_FUNC_ALIGN
178#define FUNC_ALIGNED(func) ALIGNED(func, CHECK_FUNC_ALIGN)
179#else /* CHECK_FUNC_ALIGN */
180#define FUNC_ALIGNED(func) true
181#endif /* CHECK_FUNC_ALIGN */
182
183#ifdef CHECK_STKSZ_ALIGN
184#define STKSZ_ALIGNED(stksz) ALIGNED(stksz, CHECK_STKSZ_ALIGN)
185#else /* CHECK_STKSZ_ALIGN */
186#define STKSZ_ALIGNED(stksz) true
187#endif /* CHECK_STKSZ_ALIGN */
188
189#ifdef CHECK_STACK_ALIGN
190#define STACK_ALIGNED(stack) ALIGNED(stack, CHECK_STACK_ALIGN)
191#else /* CHECK_STACK_ALIGN */
192#define STACK_ALIGNED(stack) true
193#endif /* CHECK_STACK_ALIGN */
194
195#ifdef CHECK_MPF_ALIGN
196#define MPF_ALIGNED(mpf) ALIGNED(mpf, CHECK_MPF_ALIGN)
197#else /* CHECK_MPF_ALIGN */
198#define MPF_ALIGNED(mpf) true
199#endif /* CHECK_MPF_ALIGN */
200
201#ifdef CHECK_MB_ALIGN
202#define MB_ALIGNED(mb) ALIGNED(mb, CHECK_MB_ALIGN)
203#else /* CHECK_MB_ALIGN */
204#define MB_ALIGNED(mb) true
205#endif /* CHECK_MB_ALIGN */
206
207/*
208 * NULL‚Å‚È‚¢‚±‚Ƃ̃`ƒFƒbƒN
209 */
210#ifdef CHECK_FUNC_NONNULL
211#define FUNC_NONNULL(func) ((func) != NULL)
212#else /* CHECK_FUNC_NONNULL */
213#define FUNC_NONNULL(func) true
214#endif /* CHECK_FUNC_NONNULL */
215
216#ifdef CHECK_STACK_NONNULL
217#define STACK_NONNULL(stack) ((stack) != NULL)
218#else /* CHECK_STACK_NONNULL */
219#define STACK_NONNULL(stack) true
220#endif /* CHECK_STACK_NONNULL */
221
222#ifdef CHECK_MPF_NONNULL
223#define MPF_NONNULL(mpf) ((mpf) != NULL)
224#else /* CHECK_MPF_NONNULL */
225#define MPF_NONNULL(mpf) true
226#endif /* CHECK_MPF_NONNULL */
227
228/*
229 * ŠÖ”‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
230 */
231#define CHECK_ALIGN_FUNC(func) { \
232 if (!FUNC_ALIGNED(func)) { \
233 ercd = E_PAR; \
234 goto error_exit; \
235 } \
236}
237
238#define CHECK_NONNULL_FUNC(func) { \
239 if (!FUNC_NONNULL(func)) { \
240 ercd = E_PAR; \
241 goto error_exit; \
242 } \
243}
244
245/*
246 * ƒXƒ^ƒbƒNƒTƒCƒY‚̃`ƒFƒbƒNiE_PARj
247 */
248#define CHECK_ALIGN_STKSZ(stksz) { \
249 if (!STKSZ_ALIGNED(stksz)) { \
250 ercd = E_PAR; \
251 goto error_exit; \
252 } \
253}
254
255#ifndef TARGET_MIN_STKSZ
256#define TARGET_MIN_STKSZ 1U /* –¢’è‹`‚̏ꍇ‚Í0‚Å‚È‚¢‚±‚Æ‚ðƒ`ƒFƒbƒN */
257#endif /* TARGET_MIN_STKSZ */
258
259#define CHECK_STKSZ_MIN(stksz) { \
260 if ((stksz) < TARGET_MIN_STKSZ) { \
261 ercd = E_PAR; \
262 goto error_exit; \
263 } \
264}
265
266/*
267 * ƒXƒ^ƒbƒN‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
268 */
269#define CHECK_ALIGN_STACK(stack) { \
270 if (!STACK_ALIGNED(stack)) { \
271 ercd = E_PAR; \
272 goto error_exit; \
273 } \
274}
275
276#define CHECK_NONNULL_STACK(stack) { \
277 if (!STACK_NONNULL(stack)) { \
278 ercd = E_PAR; \
279 goto error_exit; \
280 } \
281}
282
283/*
284 * ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
285 */
286#define CHECK_ALIGN_MPF(mpf) { \
287 if (!MPF_ALIGNED(mpf)) { \
288 ercd = E_PAR; \
289 goto error_exit; \
290 } \
291}
292
293#define CHECK_NONNULL_MPF(mpf) { \
294 if (!MPF_NONNULL(mpf)) { \
295 ercd = E_PAR; \
296 goto error_exit; \
297 } \
298}
299
300/*
301 * ŠÇ——̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
302 */
303#define CHECK_ALIGN_MB(mb) { \
304 if (!MB_ALIGNED(mb)) { \
305 ercd = E_PAR; \
306 goto error_exit; \
307 } \
308}
309
310/*
311 * ‚»‚Ì‘¼‚̃pƒ‰ƒ[ƒ^ƒGƒ‰[‚̃`ƒFƒbƒNiE_PARj
312 */
313#define CHECK_PAR(exp) { \
314 if (!(exp)) { \
315 ercd = E_PAR; \
316 goto error_exit; \
317 } \
318}
319
320/*
321 * ƒIƒuƒWƒFƒNƒgID‚͈̔͂̔»’è
322 */
323#define VALID_TSKID(tskid) (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
324#define VALID_SEMID(semid) (TMIN_SEMID <= (semid) && (semid) <= tmax_semid)
325#define VALID_FLGID(flgid) (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid)
326#define VALID_DTQID(dtqid) (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid)
327#define VALID_PDQID(pdqid) (TMIN_PDQID <= (pdqid) && (pdqid) <= tmax_pdqid)
328#define VALID_MBXID(mbxid) (TMIN_MBXID <= (mbxid) && (mbxid) <= tmax_mbxid)
329#define VALID_MPFID(mpfid) (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid)
330#define VALID_CYCID(cycid) (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid)
331#define VALID_ALMID(almid) (TMIN_ALMID <= (almid) && (almid) <= tmax_almid)
332#define VALID_ISRID(isrid) (TMIN_ISRID <= (isrid) && (isrid) <= tmax_isrid)
333
334/*
335 * ƒIƒuƒWƒFƒNƒgID‚̃`ƒFƒbƒNiE_IDj
336 */
337#define CHECK_TSKID(tskid) { \
338 if (!VALID_TSKID(tskid)) { \
339 ercd = E_ID; \
340 goto error_exit; \
341 } \
342}
343
344#define CHECK_TSKID_SELF(tskid) { \
345 if (!(VALID_TSKID(tskid) || (tskid) == TSK_SELF)) { \
346 ercd = E_ID; \
347 goto error_exit; \
348 } \
349}
350
351#define CHECK_SEMID(semid) { \
352 if (!VALID_SEMID(semid)) { \
353 ercd = E_ID; \
354 goto error_exit; \
355 } \
356}
357
358#define CHECK_FLGID(flgid) { \
359 if (!VALID_FLGID(flgid)) { \
360 ercd = E_ID; \
361 goto error_exit; \
362 } \
363}
364
365#define CHECK_DTQID(dtqid) { \
366 if (!VALID_DTQID(dtqid)) { \
367 ercd = E_ID; \
368 goto error_exit; \
369 } \
370}
371
372#define CHECK_PDQID(pdqid) { \
373 if (!VALID_PDQID(pdqid)) { \
374 ercd = E_ID; \
375 goto error_exit; \
376 } \
377}
378
379#define CHECK_MBXID(mbxid) { \
380 if (!VALID_MBXID(mbxid)) { \
381 ercd = E_ID; \
382 goto error_exit; \
383 } \
384}
385
386#define CHECK_MPFID(mpfid) { \
387 if (!VALID_MPFID(mpfid)) { \
388 ercd = E_ID; \
389 goto error_exit; \
390 } \
391}
392
393#define CHECK_CYCID(cycid) { \
394 if (!VALID_CYCID(cycid)) { \
395 ercd = E_ID; \
396 goto error_exit; \
397 } \
398}
399
400#define CHECK_ALMID(almid) { \
401 if (!VALID_ALMID(almid)) { \
402 ercd = E_ID; \
403 goto error_exit; \
404 } \
405}
406
407#define CHECK_ISRID(isrid) { \
408 if (!VALID_ISRID(isrid)) { \
409 ercd = E_ID; \
410 goto error_exit; \
411 } \
412}
413
414/*
415 * ŒÄo‚µƒRƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒNiE_CTXj
416 */
417#define CHECK_TSKCTX() { \
418 if (sense_context()) { \
419 ercd = E_CTX; \
420 goto error_exit; \
421 } \
422}
423
424#define CHECK_INTCTX() { \
425 if (!sense_context()) { \
426 ercd = E_CTX; \
427 goto error_exit; \
428 } \
429}
430
431/*
432 * ŒÄo‚µƒRƒ“ƒeƒLƒXƒg‚ÆCPUƒƒbƒNó‘Ԃ̃`ƒFƒbƒNiE_CTXj
433 */
434#define CHECK_TSKCTX_UNL() { \
435 if (sense_context() || t_sense_lock()) { \
436 ercd = E_CTX; \
437 goto error_exit; \
438 } \
439}
440
441#define CHECK_INTCTX_UNL() { \
442 if (!sense_context() || i_sense_lock()) { \
443 ercd = E_CTX; \
444 goto error_exit; \
445 } \
446}
447
448/*
449 * ƒfƒBƒXƒpƒbƒ`•Û—¯ó‘Ô‚Å‚È‚¢‚©‚̃`ƒFƒbƒNiE_CTXj
450 */
451#define CHECK_DISPATCH() { \
452 if (sense_context() || t_sense_lock() || !dspflg) { \
453 ercd = E_CTX; \
454 goto error_exit; \
455 } \
456}
457
458/*
459 * ‚»‚Ì‘¼‚̃Rƒ“ƒeƒLƒXƒgƒGƒ‰[‚̃`ƒFƒbƒNiE_CTXj
460 */
461#define CHECK_CTX(exp) { \
462 if (!(exp)) { \
463 ercd = E_CTX; \
464 goto error_exit; \
465 } \
466}
467
468/*
469 * Ž©ƒ^ƒXƒN‚ðŽw’肵‚Ä‚¢‚È‚¢‚©‚̃`ƒFƒbƒNiE_ILUSEj
470 */
471#define CHECK_NONSELF(p_tcb) { \
472 if ((p_tcb) == p_runtsk) { \
473 ercd = E_ILUSE; \
474 goto error_exit; \
475 } \
476}
477
478/*
479 * ‚»‚Ì‘¼‚Ì•s³Žg—pƒGƒ‰[‚̃`ƒFƒbƒNiE_ILUSEj
480 */
481#define CHECK_ILUSE(exp) { \
482 if (!(exp)) { \
483 ercd = E_ILUSE; \
484 goto error_exit; \
485 } \
486}
487
488/*
489 * –¢ƒTƒ|[ƒg‹@”\ƒGƒ‰[‚̃`ƒFƒbƒNiE_NOSPTj
490 */
491#define CHECK_NOSPT(exp) { \
492 if (!(exp)) { \
493 ercd = E_NOSPT; \
494 goto error_exit; \
495 } \
496}
497
498#endif /* TOPPERS_CHECK_H */
Note: See TracBrowser for help on using the repository browser.