source: rtos_arduino/trunk/asp_1.9.2/kernel/check.h@ 136

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

ライブラリとOS及びベーシックなサンプルの追加.

File size: 8.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-2011 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者
12は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再é…
21å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
22å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
23 * 者
24マニュアルなど)に,上記の著作権表示,この利用条件および下記
25 * の無保証規定を掲載すること.
26 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
27 * 用できない形で再é…
28å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
29 * と.
30 * (a) 再é…
31å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
32マニュアルなど)に,上記の著
33 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
34 * (b) 再é…
35å¸ƒã®å½¢æ…
36‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
37 * 報告すること.
38 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
39 * 害からも,上記著作権者
40およびTOPPERSプロジェクトをå…
41è²¬ã™ã‚‹ã“と.
42 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
43 * 由に基づく請求からも,上記著作権者
44およびTOPPERSプロジェクトを
45 * å…
46è²¬ã™ã‚‹ã“と.
47 *
48 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
49お
50 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
51 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
52 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
53 * の責任を負わない.
54 *
55 * @(#) $Id: check.h 2229 2011-08-14 08:42:37Z ertl-hiro $
56 */
57
58/*
59 * エラーチェック用マクロ
60 */
61
62#ifndef TOPPERS_CHECK_H
63#define TOPPERS_CHECK_H
64
65/*
66 * 優å…
67ˆåº¦ã®ç¯„囲の判定
68 */
69#define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
70
71#ifndef VALID_INTPRI_CHGIPM
72#define VALID_INTPRI_CHGIPM(intpri) \
73 (TMIN_INTPRI <= (intpri) && (intpri) <= TIPM_ENAALL)
74#endif /* VALID_INTPRI_CHGIPM */
75
76/*
77 * タスク優å…
78ˆåº¦ã®ãƒã‚§ãƒƒã‚¯ï¼ˆE_PAR)
79 */
80#define CHECK_TPRI(tpri) do { \
81 if (!VALID_TPRI(tpri)) { \
82 ercd = E_PAR; \
83 goto error_exit; \
84 } \
85} while (false)
86
87#define CHECK_TPRI_INI(tpri) do { \
88 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_INI)) { \
89 ercd = E_PAR; \
90 goto error_exit; \
91 } \
92} while (false)
93
94#define CHECK_TPRI_SELF(tpri) do { \
95 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_SELF)) { \
96 ercd = E_PAR; \
97 goto error_exit; \
98 } \
99} while (false)
100
101/*
102 * タイムアウト指定値のチェック(E_PAR)
103 */
104#define CHECK_TMOUT(tmout) do { \
105 if (!(TMO_FEVR <= (tmout))) { \
106 ercd = E_PAR; \
107 goto error_exit; \
108 } \
109} while (false)
110
111/*
112 * 割込み優å…
113ˆåº¦ã®ãƒã‚§ãƒƒã‚¯ï¼ˆE_PAR)
114 */
115#define CHECK_INTPRI_CHGIPM(intpri) do { \
116 if (!VALID_INTPRI_CHGIPM(intpri)) { \
117 ercd = E_PAR; \
118 goto error_exit; \
119 } \
120} while (false)
121
122/*
123 * 割込み番号のチェック(E_PAR)
124 */
125#define CHECK_INTNO_DISINT(intno) do { \
126 if (!VALID_INTNO_DISINT(intno)) { \
127 ercd = E_PAR; \
128 goto error_exit; \
129 } \
130} while (false)
131
132/*
133 * その他のパラメータエラーのチェック(E_PAR)
134 */
135#define CHECK_PAR(exp) do { \
136 if (!(exp)) { \
137 ercd = E_PAR; \
138 goto error_exit; \
139 } \
140} while (false)
141
142/*
143 * オブジェクトIDの範囲の判定
144 */
145#define VALID_TSKID(tskid) (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
146#define VALID_SEMID(semid) (TMIN_SEMID <= (semid) && (semid) <= tmax_semid)
147#define VALID_FLGID(flgid) (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid)
148#define VALID_DTQID(dtqid) (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid)
149#define VALID_PDQID(pdqid) (TMIN_PDQID <= (pdqid) && (pdqid) <= tmax_pdqid)
150#define VALID_MBXID(mbxid) (TMIN_MBXID <= (mbxid) && (mbxid) <= tmax_mbxid)
151#define VALID_MPFID(mpfid) (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid)
152#define VALID_CYCID(cycid) (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid)
153#define VALID_ALMID(almid) (TMIN_ALMID <= (almid) && (almid) <= tmax_almid)
154
155/*
156 * オブジェクトIDのチェック(E_ID)
157 */
158#define CHECK_TSKID(tskid) do { \
159 if (!VALID_TSKID(tskid)) { \
160 ercd = E_ID; \
161 goto error_exit; \
162 } \
163} while (false)
164
165#define CHECK_TSKID_SELF(tskid) do { \
166 if (!(VALID_TSKID(tskid) || (tskid) == TSK_SELF)) { \
167 ercd = E_ID; \
168 goto error_exit; \
169 } \
170} while (false)
171
172#define CHECK_SEMID(semid) do { \
173 if (!VALID_SEMID(semid)) { \
174 ercd = E_ID; \
175 goto error_exit; \
176 } \
177} while (false)
178
179#define CHECK_FLGID(flgid) do { \
180 if (!VALID_FLGID(flgid)) { \
181 ercd = E_ID; \
182 goto error_exit; \
183 } \
184} while (false)
185
186#define CHECK_DTQID(dtqid) do { \
187 if (!VALID_DTQID(dtqid)) { \
188 ercd = E_ID; \
189 goto error_exit; \
190 } \
191} while (false)
192
193#define CHECK_PDQID(pdqid) do { \
194 if (!VALID_PDQID(pdqid)) { \
195 ercd = E_ID; \
196 goto error_exit; \
197 } \
198} while (false)
199
200#define CHECK_MBXID(mbxid) do { \
201 if (!VALID_MBXID(mbxid)) { \
202 ercd = E_ID; \
203 goto error_exit; \
204 } \
205} while (false)
206
207#define CHECK_MPFID(mpfid) do { \
208 if (!VALID_MPFID(mpfid)) { \
209 ercd = E_ID; \
210 goto error_exit; \
211 } \
212} while (false)
213
214#define CHECK_CYCID(cycid) do { \
215 if (!VALID_CYCID(cycid)) { \
216 ercd = E_ID; \
217 goto error_exit; \
218 } \
219} while (false)
220
221#define CHECK_ALMID(almid) do { \
222 if (!VALID_ALMID(almid)) { \
223 ercd = E_ID; \
224 goto error_exit; \
225 } \
226} while (false)
227
228/*
229 * 呼出しコンテキストのチェック(E_CTX)
230 */
231#define CHECK_TSKCTX() do { \
232 if (sense_context()) { \
233 ercd = E_CTX; \
234 goto error_exit; \
235 } \
236} while (false)
237
238#define CHECK_INTCTX() do { \
239 if (!sense_context()) { \
240 ercd = E_CTX; \
241 goto error_exit; \
242 } \
243} while (false)
244
245/*
246 * 呼出しコンテキストとCPUロック状æ…
247‹ã®ãƒã‚§ãƒƒã‚¯ï¼ˆE_CTX)
248 */
249#define CHECK_TSKCTX_UNL() do { \
250 if (sense_context() || t_sense_lock()) { \
251 ercd = E_CTX; \
252 goto error_exit; \
253 } \
254} while (false)
255
256#define CHECK_INTCTX_UNL() do { \
257 if (!sense_context() || i_sense_lock()) { \
258 ercd = E_CTX; \
259 goto error_exit; \
260 } \
261} while (false)
262
263/*
264 * ディスパッチ保留状æ…
265‹ã§ãªã„かのチェック(E_CTX)
266 */
267#define CHECK_DISPATCH() do { \
268 if (sense_context() || t_sense_lock() || !dspflg) { \
269 ercd = E_CTX; \
270 goto error_exit; \
271 } \
272} while (false)
273
274/*
275 * その他のコンテキストエラーのチェック(E_CTX)
276 */
277#define CHECK_CTX(exp) do { \
278 if (!(exp)) { \
279 ercd = E_CTX; \
280 goto error_exit; \
281 } \
282} while (false)
283
284/*
285 * 自タスクを指定していないかのチェック(E_ILUSE)
286 */
287#define CHECK_NONSELF(p_tcb) do { \
288 if ((p_tcb) == p_runtsk) { \
289 ercd = E_ILUSE; \
290 goto error_exit; \
291 } \
292} while (false)
293
294/*
295 * その他の不正使用エラーのチェック(E_ILUSE)
296 */
297#define CHECK_ILUSE(exp) do { \
298 if (!(exp)) { \
299 ercd = E_ILUSE; \
300 goto error_exit; \
301 } \
302} while (false)
303
304#endif /* TOPPERS_CHECK_H */
Note: See TracBrowser for help on using the repository browser.