source: extension/mutex/kernel/check.h

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

TOPPERS/ASP 1.9.1

ファイルサイズ: 8.2 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-2012 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_MTXID(mtxid)      (TMIN_MTXID <= (mtxid) && (mtxid) <= tmax_mtxid)
134#define VALID_MPFID(mpfid)      (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid)
135#define VALID_CYCID(cycid)      (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid)
136#define VALID_ALMID(almid)      (TMIN_ALMID <= (almid) && (almid) <= tmax_almid)
137
138/*
139 *  ¥ª¥Ö¥ž¥§¥¯¥ÈID€Î¥Á¥§¥Ã¥¯¡ÊE_ID¡Ë
140 */
141#define CHECK_TSKID(tskid) do {                                                         \
142        if (!VALID_TSKID(tskid)) {                                                              \
143                ercd = E_ID;                                                                            \
144                goto error_exit;                                                                        \
145        }                                                                                                               \
146} while (false)
147
148#define CHECK_TSKID_SELF(tskid) do {                                            \
149        if (!(VALID_TSKID(tskid) || (tskid) == TSK_SELF)) {             \
150                ercd = E_ID;                                                                            \
151                goto error_exit;                                                                        \
152        }                                                                                                               \
153} while (false)
154
155#define CHECK_SEMID(semid) do {                                                         \
156        if (!VALID_SEMID(semid)) {                                                              \
157                ercd = E_ID;                                                                            \
158                goto error_exit;                                                                        \
159        }                                                                                                               \
160} while (false)
161
162#define CHECK_FLGID(flgid) do {                                                         \
163        if (!VALID_FLGID(flgid)) {                                                              \
164                ercd = E_ID;                                                                            \
165                goto error_exit;                                                                        \
166        }                                                                                                               \
167} while (false)
168
169#define CHECK_DTQID(dtqid) do {                                                         \
170        if (!VALID_DTQID(dtqid)) {                                                              \
171                ercd = E_ID;                                                                            \
172                goto error_exit;                                                                        \
173        }                                                                                                               \
174} while (false)
175
176#define CHECK_PDQID(pdqid) do {                                                         \
177        if (!VALID_PDQID(pdqid)) {                                                              \
178                ercd = E_ID;                                                                            \
179                goto error_exit;                                                                        \
180        }                                                                                                               \
181} while (false)
182
183#define CHECK_MBXID(mbxid) do {                                                         \
184        if (!VALID_MBXID(mbxid)) {                                                              \
185                ercd = E_ID;                                                                            \
186                goto error_exit;                                                                        \
187        }                                                                                                               \
188} while (false)
189
190#define CHECK_MTXID(mtxid) do {                                                         \
191        if (!VALID_MTXID(mtxid)) {                                                              \
192                ercd = E_ID;                                                                            \
193                goto error_exit;                                                                        \
194        }                                                                                                               \
195} while (false)
196
197#define CHECK_MPFID(mpfid) do {                                                         \
198        if (!VALID_MPFID(mpfid)) {                                                              \
199                ercd = E_ID;                                                                            \
200                goto error_exit;                                                                        \
201        }                                                                                                               \
202} while (false)
203
204#define CHECK_CYCID(cycid) do {                                                         \
205        if (!VALID_CYCID(cycid)) {                                                              \
206                ercd = E_ID;                                                                            \
207                goto error_exit;                                                                        \
208        }                                                                                                               \
209} while (false)
210
211#define CHECK_ALMID(almid) do {                                                         \
212        if (!VALID_ALMID(almid)) {                                                              \
213                ercd = E_ID;                                                                            \
214                goto error_exit;                                                                        \
215        }                                                                                                               \
216} while (false)
217
218/*
219 *  žÆœÐ€·¥³¥ó¥Æ¥­¥¹¥È€Î¥Á¥§¥Ã¥¯¡ÊE_CTX¡Ë
220 */
221#define CHECK_TSKCTX() do {                                                                     \
222        if (sense_context()) {                                                                  \
223                ercd = E_CTX;                                                                           \
224                goto error_exit;                                                                        \
225        }                                                                                                               \
226} while (false)
227
228#define CHECK_INTCTX() do {                                                                     \
229        if (!sense_context()) {                                                                 \
230                ercd = E_CTX;                                                                           \
231                goto error_exit;                                                                        \
232        }                                                                                                               \
233} while (false)
234
235/*
236 *  žÆœÐ€·¥³¥ó¥Æ¥­¥¹¥È€ÈCPU¥í¥Ã¥¯ŸõÂրΥÁ¥§¥Ã¥¯¡ÊE_CTX¡Ë
237 */
238#define CHECK_TSKCTX_UNL() do {                                                         \
239        if (sense_context() || t_sense_lock()) {                                \
240                ercd = E_CTX;                                                                           \
241                goto error_exit;                                                                        \
242        }                                                                                                               \
243} while (false)
244
245#define CHECK_INTCTX_UNL() do {                                                         \
246        if (!sense_context() || i_sense_lock()) {                               \
247                ercd = E_CTX;                                                                           \
248                goto error_exit;                                                                        \
249        }                                                                                                               \
250} while (false)
251
252/*
253 *  ¥Ç¥£¥¹¥Ñ¥Ã¥ÁÊÝαŸõÂրǀʀ€€«€Î¥Á¥§¥Ã¥¯¡ÊE_CTX¡Ë
254 */
255#define CHECK_DISPATCH() do {                                                           \
256        if (sense_context() || t_sense_lock() || !dspflg) {             \
257                ercd = E_CTX;                                                                           \
258                goto error_exit;                                                                        \
259        }                                                                                                               \
260} while (false)
261
262/*
263 *  €œ€ÎŸ€Î¥³¥ó¥Æ¥­¥¹¥È¥š¥é¡Œ€Î¥Á¥§¥Ã¥¯¡ÊE_CTX¡Ë
264 */
265#define CHECK_CTX(exp) do {                                                                     \
266        if (!(exp)) {                                                                                   \
267                ercd = E_CTX;                                                                           \
268                goto error_exit;                                                                        \
269        }                                                                                                               \
270} while (false)
271
272/*
273 *  Œ«¥¿¥¹¥¯€ò»ØÄꀷ€Æ€€€Ê€€€«€Î¥Á¥§¥Ã¥¯¡ÊE_ILUSE¡Ë
274 */
275#define CHECK_NONSELF(p_tcb) do {                                                       \
276        if ((p_tcb) == p_runtsk) {                                                              \
277                ercd = E_ILUSE;                                                                         \
278                goto error_exit;                                                                        \
279        }                                                                                                               \
280} while (false)
281
282/*
283 *  €œ€ÎŸ€ÎÉÔÀµ»ÈÍÑ¥š¥é¡Œ€Î¥Á¥§¥Ã¥¯¡ÊE_ILUSE¡Ë
284 */
285#define CHECK_ILUSE(exp) do {                                                           \
286        if (!(exp)) {                                                                                   \
287                ercd = E_ILUSE;                                                                         \
288                goto error_exit;                                                                        \
289        }                                                                                                               \
290} while (false)
291
292#endif /* TOPPERS_CHECK_H */
詳しい使い方は TracBrowser を参照してください。