source: mypx/extension/ovrhdr/kernel/check.h

このファイルの最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 8.1 KB
 
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-2011 by Embedded and Real-Time Systems Laboratory
9 *              Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
12 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
13 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
14 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
15 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
16 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
17 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
18 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
19 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
20 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
21 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
22 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
23 *      €È¡¥
24 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
25 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
26 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
27 *        Êó¹ð€¹€ë€³€È¡¥
28 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
29 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
30 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
31 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
32 *      ÌÈÀÕ€¹€ë€³€È¡¥
33 *
34 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
35 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
36 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
37 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
38 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
39 *
40 *  @(#) $Id$
41 */
42
43/*
44 *              ¥š¥é¡Œ¥Á¥§¥Ã¥¯ÍÑ¥Þ¥¯¥í
45 */
46
47#ifndef TOPPERS_CHECK_H
48#define TOPPERS_CHECK_H
49
50/*
51 *  Í¥ÀèÅÙ€ÎÈϰπÎÈœÄê
52 */
53#define VALID_TPRI(tpri)        (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
54
55#ifndef VALID_INTPRI_CHGIPM
56#define VALID_INTPRI_CHGIPM(intpri) \
57                                (TMIN_INTPRI <= (intpri) && (intpri) <= TIPM_ENAALL)
58#endif /* VALID_INTPRI_CHGIPM */
59
60/*
61 *  ¥¿¥¹¥¯Í¥ÀèÅـΥÁ¥§¥Ã¥¯¡ÊE_PAR¡Ë
62 */
63#define CHECK_TPRI(tpri) do {                                                           \
64        if (!VALID_TPRI(tpri)) {                                                                \
65                ercd = E_PAR;                                                                           \
66                goto error_exit;                                                                        \
67        }                                                                                                               \
68} while (false)
69
70#define CHECK_TPRI_INI(tpri) do {                                                       \
71        if (!(VALID_TPRI(tpri) || (tpri) == TPRI_INI)) {                \
72                ercd = E_PAR;                                                                           \
73                goto error_exit;                                                                        \
74        }                                                                                                               \
75} while (false)
76
77#define CHECK_TPRI_SELF(tpri) do {                                                      \
78        if (!(VALID_TPRI(tpri) || (tpri) == TPRI_SELF)) {               \
79                ercd = E_PAR;                                                                           \
80                goto error_exit;                                                                        \
81        }                                                                                                               \
82} while (false)
83
84/*
85 *  ¥¿¥€¥à¥¢¥Š¥È»ØÄêÃ̀ΥÁ¥§¥Ã¥¯¡ÊE_PAR¡Ë
86 */
87#define CHECK_TMOUT(tmout) do {                                                         \
88        if (!(TMO_FEVR <= (tmout))) {                                                   \
89                ercd = E_PAR;                                                                           \
90                goto error_exit;                                                                        \
91        }                                                                                                               \
92} while (false)
93
94/*
95 *  ³ä¹þ€ßÍ¥ÀèÅـΥÁ¥§¥Ã¥¯¡ÊE_PAR¡Ë
96 */
97#define CHECK_INTPRI_CHGIPM(intpri) do {                                        \
98        if (!VALID_INTPRI_CHGIPM(intpri)) {                                             \
99                ercd = E_PAR;                                                                           \
100                goto error_exit;                                                                        \
101        }                                                                                                               \
102} while (false)
103
104/*
105 *  ³ä¹þ€ßÈÖ¹æ€Î¥Á¥§¥Ã¥¯¡ÊE_PAR¡Ë
106 */
107#define CHECK_INTNO_DISINT(intno) do {                                          \
108        if (!VALID_INTNO_DISINT(intno)) {                                               \
109                ercd = E_PAR;                                                                           \
110                goto error_exit;                                                                        \
111        }                                                                                                               \
112} while (false)
113
114/*
115 *  €œ€ÎŸ€Î¥Ñ¥é¥á¡Œ¥¿¥š¥é¡Œ€Î¥Á¥§¥Ã¥¯¡ÊE_PAR¡Ë
116 */
117#define CHECK_PAR(exp) do {                                                                     \
118        if (!(exp)) {                                                                                   \
119                ercd = E_PAR;                                                                           \
120                goto error_exit;                                                                        \
121        }                                                                                                               \
122} while (false)
123
124/*
125 *  ¥ª¥Ö¥ž¥§¥¯¥ÈID€ÎÈϰπÎÈœÄê
126 */
127#define VALID_TSKID(tskid)      (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
128#define VALID_SEMID(semid)      (TMIN_SEMID <= (semid) && (semid) <= tmax_semid)
129#define VALID_FLGID(flgid)      (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid)
130#define VALID_DTQID(dtqid)      (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid)
131#define VALID_PDQID(pdqid)      (TMIN_PDQID <= (pdqid) && (pdqid) <= tmax_pdqid)
132#define VALID_MBXID(mbxid)      (TMIN_MBXID <= (mbxid) && (mbxid) <= tmax_mbxid)
133#define VALID_MPFID(mpfid)      (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid)
134#define VALID_CYCID(cycid)      (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid)
135#define VALID_ALMID(almid)      (TMIN_ALMID <= (almid) && (almid) <= tmax_almid)
136
137/*
138 *  ¥ª¥Ö¥ž¥§¥¯¥ÈID€Î¥Á¥§¥Ã¥¯¡ÊE_ID¡Ë
139 */
140#define CHECK_TSKID(tskid) do {                                                         \
141        if (!VALID_TSKID(tskid)) {                                                              \
142                ercd = E_ID;                                                                            \
143                goto error_exit;                                                                        \
144        }                                                                                                               \
145} while (false)
146
147#define CHECK_TSKID_SELF(tskid) do {                                            \
148        if (!(VALID_TSKID(tskid) || (tskid) == TSK_SELF)) {             \
149                ercd = E_ID;                                                                            \
150                goto error_exit;                                                                        \
151        }                                                                                                               \
152} while (false)
153
154#define CHECK_SEMID(semid) do {                                                         \
155        if (!VALID_SEMID(semid)) {                                                              \
156                ercd = E_ID;                                                                            \
157                goto error_exit;                                                                        \
158        }                                                                                                               \
159} while (false)
160
161#define CHECK_FLGID(flgid) do {                                                         \
162        if (!VALID_FLGID(flgid)) {                                                              \
163                ercd = E_ID;                                                                            \
164                goto error_exit;                                                                        \
165        }                                                                                                               \
166} while (false)
167
168#define CHECK_DTQID(dtqid) do {                                                         \
169        if (!VALID_DTQID(dtqid)) {                                                              \
170                ercd = E_ID;                                                                            \
171                goto error_exit;                                                                        \
172        }                                                                                                               \
173} while (false)
174
175#define CHECK_PDQID(pdqid) do {                                                         \
176        if (!VALID_PDQID(pdqid)) {                                                              \
177                ercd = E_ID;                                                                            \
178                goto error_exit;                                                                        \
179        }                                                                                                               \
180} while (false)
181
182#define CHECK_MBXID(mbxid) do {                                                         \
183        if (!VALID_MBXID(mbxid)) {                                                              \
184                ercd = E_ID;                                                                            \
185                goto error_exit;                                                                        \
186        }                                                                                                               \
187} while (false)
188
189#define CHECK_MPFID(mpfid) do {                                                         \
190        if (!VALID_MPFID(mpfid)) {                                                              \
191                ercd = E_ID;                                                                            \
192                goto error_exit;                                                                        \
193        }                                                                                                               \
194} while (false)
195
196#define CHECK_CYCID(cycid) do {                                                         \
197        if (!VALID_CYCID(cycid)) {                                                              \
198                ercd = E_ID;                                                                            \
199                goto error_exit;                                                                        \
200        }                                                                                                               \
201} while (false)
202
203#define CHECK_ALMID(almid) do {                                                         \
204        if (!VALID_ALMID(almid)) {                                                              \
205                ercd = E_ID;                                                                            \
206                goto error_exit;                                                                        \
207        }                                                                                                               \
208} while (false)
209
210/*
211 *  žÆœÐ€·¥³¥ó¥Æ¥­¥¹¥È€Î¥Á¥§¥Ã¥¯¡ÊE_CTX¡Ë
212 */
213#define CHECK_TSKCTX() do {                                                                     \
214        if (sense_context()) {                                                                  \
215                ercd = E_CTX;                                                                           \
216                goto error_exit;                                                                        \
217        }                                                                                                               \
218} while (false)
219
220#define CHECK_INTCTX() do {                                                                     \
221        if (!sense_context()) {                                                                 \
222                ercd = E_CTX;                                                                           \
223                goto error_exit;                                                                        \
224        }                                                                                                               \
225} while (false)
226
227/*
228 *  žÆœÐ€·¥³¥ó¥Æ¥­¥¹¥È€ÈCPU¥í¥Ã¥¯ŸõÂրΥÁ¥§¥Ã¥¯¡ÊE_CTX¡Ë
229 */
230#define CHECK_TSKCTX_UNL() do {                                                         \
231        if (sense_context() || t_sense_lock()) {                                \
232                ercd = E_CTX;                                                                           \
233                goto error_exit;                                                                        \
234        }                                                                                                               \
235} while (false)
236
237#define CHECK_INTCTX_UNL() do {                                                         \
238        if (!sense_context() || i_sense_lock()) {                               \
239                ercd = E_CTX;                                                                           \
240                goto error_exit;                                                                        \
241        }                                                                                                               \
242} while (false)
243
244/*
245 *  ¥Ç¥£¥¹¥Ñ¥Ã¥ÁÊÝαŸõÂրǀʀ€€«€Î¥Á¥§¥Ã¥¯¡ÊE_CTX¡Ë
246 */
247#define CHECK_DISPATCH() do {                                                           \
248        if (sense_context() || t_sense_lock() || !dspflg) {             \
249                ercd = E_CTX;                                                                           \
250                goto error_exit;                                                                        \
251        }                                                                                                               \
252} while (false)
253
254/*
255 *  €œ€ÎŸ€Î¥³¥ó¥Æ¥­¥¹¥È¥š¥é¡Œ€Î¥Á¥§¥Ã¥¯¡ÊE_CTX¡Ë
256 */
257#define CHECK_CTX(exp) do {                                                                     \
258        if (!(exp)) {                                                                                   \
259                ercd = E_CTX;                                                                           \
260                goto error_exit;                                                                        \
261        }                                                                                                               \
262} while (false)
263
264/*
265 *  Œ«¥¿¥¹¥¯€ò»ØÄꀷ€Æ€€€Ê€€€«€Î¥Á¥§¥Ã¥¯¡ÊE_ILUSE¡Ë
266 */
267#define CHECK_NONSELF(p_tcb) do {                                                       \
268        if ((p_tcb) == p_runtsk) {                                                              \
269                ercd = E_ILUSE;                                                                         \
270                goto error_exit;                                                                        \
271        }                                                                                                               \
272} while (false)
273
274/*
275 *  €œ€ÎŸ€ÎÉÔÀµ»ÈÍÑ¥š¥é¡Œ€Î¥Á¥§¥Ã¥¯¡ÊE_ILUSE¡Ë
276 */
277#define CHECK_ILUSE(exp) do {                                                           \
278        if (!(exp)) {                                                                                   \
279                ercd = E_ILUSE;                                                                         \
280                goto error_exit;                                                                        \
281        }                                                                                                               \
282} while (false)
283
284/*
285 *  ÀÅŪ€Ê¥ª¥Ö¥ž¥§¥¯¥ÈŸõÂÖ¥š¥é¡Œ€Î¥Á¥§¥Ã¥¯¡ÊE_OBJ¡Ë
286 */
287#define CHECK_OBJ(exp) do {                                                                     \
288        if (!(exp)) {                                                                                   \
289                ercd = E_OBJ;                                                                           \
290                goto error_exit;                                                                        \
291        }                                                                                                               \
292} while (false)
293
294#endif /* TOPPERS_CHECK_H */
詳しい使い方は TracBrowser を参照してください。