source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/kernel/check.h@ 352

Last change on this file since 352 was 352, checked in by coas-nagasima, 6 years ago

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 8.4 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-2017 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#include "kernel_impl.h"
51
52/*
53 * オブジェクトIDの範囲の判定
54 */
55#define VALID_TSKID(tskid) (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
56#define VALID_SEMID(semid) (TMIN_SEMID <= (semid) && (semid) <= tmax_semid)
57#define VALID_FLGID(flgid) (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid)
58#define VALID_DTQID(dtqid) (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid)
59#define VALID_PDQID(pdqid) (TMIN_PDQID <= (pdqid) && (pdqid) <= tmax_pdqid)
60#define VALID_MTXID(mtxid) (TMIN_MTXID <= (mtxid) && (mtxid) <= tmax_mtxid)
61#define VALID_MPFID(mpfid) (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid)
62#define VALID_CYCID(cycid) (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid)
63#define VALID_ALMID(almid) (TMIN_ALMID <= (almid) && (almid) <= tmax_almid)
64#define VALID_ISRID(isrid) (TMIN_ISRID <= (isrid) && (isrid) <= tmax_isrid)
65
66/*
67 * オブジェクト番号の範囲の判定
68 */
69#ifndef VALID_INTNO_DISINT
70#define VALID_INTNO_DISINT(intno) VALID_INTNO(intno)
71#endif /* VALID_INTNO_DISINT */
72
73#ifndef VALID_INTNO_CREISR
74#define VALID_INTNO_CREISR(intno) VALID_INTNO(intno)
75#endif /* VALID_INTNO_CREISR */
76
77/*
78 * 優先度の範囲の判定
79 */
80#define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
81
82#define VALID_DPRI(dpri) (TMIN_DPRI <= (dpri) && (dpri) <= TMAX_DPRI)
83
84#define VALID_ISRPRI(isrpri) \
85 (TMIN_ISRPRI <= (isrpri) && (isrpri) <= TMAX_ISRPRI)
86
87#ifndef VALID_INTPRI_CHGIPM
88#define VALID_INTPRI_CHGIPM(intpri) \
89 (TMIN_INTPRI <= (intpri) && (intpri) <= TIPM_ENAALL)
90#endif /* VALID_INTPRI_CHGIPM */
91
92/*
93 * 相対時間の範囲の判定
94 */
95#define VALID_RELTIM(reltim) ((reltim) <= TMAX_RELTIM)
96
97/*
98 * タイムアウト指定値の範囲の判定
99 */
100#define VALID_TMOUT(tmout) ((tmout) <= TMAX_RELTIM || (tmout) == TMO_FEVR \
101 || (tmout) == TMO_POL)
102
103/*
104 * アラインしているかの判定
105 */
106#define ALIGNED(val, align) ((((uintptr_t)(val)) & ((align) - 1U)) == 0U)
107
108#ifdef CHECK_STKSZ_ALIGN
109#define STKSZ_ALIGN(stksz) ALIGNED(stksz, CHECK_STKSZ_ALIGN)
110#else /* CHECK_STKSZ_ALIGN */
111#define STKSZ_ALIGN(stksz) true
112#endif /* CHECK_STKSZ_ALIGN */
113
114#ifdef CHECK_INTPTR_ALIGN
115#define INTPTR_ALIGN(p_var) ALIGNED(p_var, CHECK_INTPTR_ALIGN)
116#else /* CHECK_INTPTR_ALIGN */
117#define INTPTR_ALIGN(p_var) true
118#endif /* CHECK_INTPTR_ALIGN */
119
120#ifdef CHECK_FUNC_ALIGN
121#define FUNC_ALIGN(func) ALIGNED(func, CHECK_FUNC_ALIGN)
122#else /* CHECK_FUNC_ALIGN */
123#define FUNC_ALIGN(func) true
124#endif /* CHECK_FUNC_ALIGN */
125
126#ifdef CHECK_STACK_ALIGN
127#define STACK_ALIGN(stack) ALIGNED(stack, CHECK_STACK_ALIGN)
128#else /* CHECK_STACK_ALIGN */
129#define STACK_ALIGN(stack) true
130#endif /* CHECK_STACK_ALIGN */
131
132#ifdef CHECK_MPF_ALIGN
133#define MPF_ALIGN(mpf) ALIGNED(mpf, CHECK_MPF_ALIGN)
134#else /* CHECK_MPF_ALIGN */
135#define MPF_ALIGN(mpf) true
136#endif /* CHECK_MPF_ALIGN */
137
138#ifdef CHECK_MB_ALIGN
139#define MB_ALIGN(mb) ALIGNED(mb, CHECK_MB_ALIGN)
140#else /* CHECK_MB_ALIGN */
141#define MB_ALIGN(mb) true
142#endif /* CHECK_MB_ALIGN */
143
144/*
145 * NULLでないことの判定
146 */
147#ifdef CHECK_INTPTR_NONNULL
148#define INTPTR_NONNULL(p_var) ((p_var) != NULL)
149#else /* CHECK_INTPTR_NONNULL */
150#define INTPTR_NONNULL(p_var) true
151#endif /* CHECK_INTPTR_NONNULL */
152
153#ifdef CHECK_FUNC_NONNULL
154#define FUNC_NONNULL(func) ((func) != NULL)
155#else /* CHECK_FUNC_NONNULL */
156#define FUNC_NONNULL(func) true
157#endif /* CHECK_FUNC_NONNULL */
158
159/*
160 * 呼出しコンテキストのチェック(E_CTX)
161 */
162#define CHECK_TSKCTX() do { \
163 if (sense_context()) { \
164 ercd = E_CTX; \
165 goto error_exit; \
166 } \
167} while (false)
168
169/*
170 * CPUロック状態のチェック(E_CTX)
171 */
172#define CHECK_UNL() do { \
173 if (sense_lock()) { \
174 ercd = E_CTX; \
175 goto error_exit; \
176 } \
177} while (false)
178
179/*
180 * 呼出しコンテキストとCPUロック状態のチェック(E_CTX)
181 */
182#define CHECK_TSKCTX_UNL() do { \
183 if (sense_context() || sense_lock()) { \
184 ercd = E_CTX; \
185 goto error_exit; \
186 } \
187} while (false)
188
189/*
190 * ディスパッチ保留状態でないかのチェック(E_CTX)
191 */
192#define CHECK_DISPATCH() do { \
193 if (sense_context() || sense_lock() || !dspflg) { \
194 ercd = E_CTX; \
195 goto error_exit; \
196 } \
197} while (false)
198
199/*
200 * その他のコンテキストエラーのチェック(E_CTX)
201 */
202#define CHECK_CTX(exp) do { \
203 if (!(exp)) { \
204 ercd = E_CTX; \
205 goto error_exit; \
206 } \
207} while (false)
208
209/*
210 * オブジェクトIDのチェック(E_ID)
211 */
212#define CHECK_ID(exp) do { \
213 if (!(exp)) { \
214 ercd = E_ID; \
215 goto error_exit; \
216 } \
217} while (false)
218
219/*
220 * 予約属性エラーのチェック(E_RSATR)
221 */
222#define CHECK_RSATR(atr, valid_atr) do { \
223 if (((atr) & ~(valid_atr)) != 0U) { \
224 ercd = E_RSATR; \
225 goto error_exit; \
226 } \
227} while (false)
228
229/*
230 * パラメータエラーのチェック(E_PAR)
231 */
232#define CHECK_PAR(exp) do { \
233 if (!(exp)) { \
234 ercd = E_PAR; \
235 goto error_exit; \
236 } \
237} while (false)
238
239/*
240 * 不正使用エラーのチェック(E_ILUSE)
241 */
242#define CHECK_ILUSE(exp) do { \
243 if (!(exp)) { \
244 ercd = E_ILUSE; \
245 goto error_exit; \
246 } \
247} while (false)
248
249/*
250 * 静的なオブジェクト状態エラーのチェック(E_OBJ)
251 */
252#define CHECK_OBJ(exp) do { \
253 if (!(exp)) { \
254 ercd = E_OBJ; \
255 goto error_exit; \
256 } \
257} while (false)
258
259#endif /* TOPPERS_CHECK_H */
Note: See TracBrowser for help on using the repository browser.