00001 /* 00002 * TOPPERS/ASP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Advanced Standard Profile Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005-2007 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 00012 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 00013 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 00031 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00032 * 免責すること. 00033 * 00034 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00035 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00036 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00037 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00038 * の責任を負わない. 00039 * 00040 * @(#) $Id: check.h 264 2007-07-12 08:23:10Z hiro $ 00041 */ 00042 00043 /* 00044 * エラーチェック用マクロ 00045 */ 00046 00047 #ifndef TOPPERS_CHECK_H 00048 #define TOPPERS_CHECK_H 00049 00050 /* 00051 * 優先度の範囲の判定 00052 */ 00053 #define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI) 00054 00055 #ifndef VALID_INTPRI_CHGIPM 00056 #define VALID_INTPRI_CHGIPM(intpri) \ 00057 ((TMIN_INTPRI <= (intpri) && (intpri) <= TIPM_ENAALL)) 00058 #endif /* VALID_INTPRI_CHGIPM */ 00059 00060 /* 00061 * タスク優先度のチェック(E_PAR) 00062 */ 00063 #define CHECK_TPRI(tpri) { \ 00064 if (!VALID_TPRI(tpri)) { \ 00065 ercd = E_PAR; \ 00066 goto error_exit; \ 00067 } \ 00068 } 00069 00070 #define CHECK_TPRI_INI(tpri) { \ 00071 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_INI)) { \ 00072 ercd = E_PAR; \ 00073 goto error_exit; \ 00074 } \ 00075 } 00076 00077 #define CHECK_TPRI_SELF(tpri) { \ 00078 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_SELF)) { \ 00079 ercd = E_PAR; \ 00080 goto error_exit; \ 00081 } \ 00082 } 00083 00084 /* 00085 * タイムアウト指定値のチェック(E_PAR) 00086 */ 00087 #define CHECK_TMOUT(tmout) { \ 00088 if (!(TMO_FEVR <= (tmout))) { \ 00089 ercd = E_PAR; \ 00090 goto error_exit; \ 00091 } \ 00092 } 00093 00094 /* 00095 * 割込み優先度のチェック(E_PAR) 00096 */ 00097 #define CHECK_INTPRI_CHGIPM(inttpri) { \ 00098 if (!VALID_INTPRI_CHGIPM(intpri)) { \ 00099 ercd = E_PAR; \ 00100 goto error_exit; \ 00101 } \ 00102 } 00103 00104 /* 00105 * 割込み番号のチェック(E_PAR) 00106 */ 00107 #define CHECK_INTNO_DISINT(intno) { \ 00108 if (!VALID_INTNO_DISINT(intno)) { \ 00109 ercd = E_PAR; \ 00110 goto error_exit; \ 00111 } \ 00112 } 00113 00114 /* 00115 * その他のパラメータエラーのチェック(E_PAR) 00116 */ 00117 #define CHECK_PAR(exp) { \ 00118 if (!(exp)) { \ 00119 ercd = E_PAR; \ 00120 goto error_exit; \ 00121 } \ 00122 } 00123 00124 /* 00125 * オブジェクトIDの範囲の判定 00126 */ 00127 #define VALID_TSKID(tskid) (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid) 00128 #define VALID_SEMID(semid) (TMIN_SEMID <= (semid) && (semid) <= tmax_semid) 00129 #define VALID_FLGID(flgid) (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid) 00130 #define VALID_DTQID(dtqid) (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid) 00131 #define VALID_PDQID(pdqid) (TMIN_PDQID <= (pdqid) && (pdqid) <= tmax_pdqid) 00132 #define VALID_MBXID(mbxid) (TMIN_MBXID <= (mbxid) && (mbxid) <= tmax_mbxid) 00133 #define VALID_MPFID(mpfid) (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid) 00134 #define VALID_CYCID(cycid) (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid) 00135 #define VALID_ALMID(almid) (TMIN_ALMID <= (almid) && (almid) <= tmax_almid) 00136 00137 /* 00138 * オブジェクトIDのチェック(E_ID) 00139 */ 00140 #define CHECK_TSKID(tskid) { \ 00141 if (!VALID_TSKID(tskid)) { \ 00142 ercd = E_ID; \ 00143 goto error_exit; \ 00144 } \ 00145 } 00146 00147 #define CHECK_TSKID_SELF(tskid) { \ 00148 if (!(VALID_TSKID(tskid) || (tskid) == TSK_SELF)) { \ 00149 ercd = E_ID; \ 00150 goto error_exit; \ 00151 } \ 00152 } 00153 00154 #define CHECK_SEMID(semid) { \ 00155 if (!VALID_SEMID(semid)) { \ 00156 ercd = E_ID; \ 00157 goto error_exit; \ 00158 } \ 00159 } 00160 00161 #define CHECK_FLGID(flgid) { \ 00162 if (!VALID_FLGID(flgid)) { \ 00163 ercd = E_ID; \ 00164 goto error_exit; \ 00165 } \ 00166 } 00167 00168 #define CHECK_DTQID(dtqid) { \ 00169 if (!VALID_DTQID(dtqid)) { \ 00170 ercd = E_ID; \ 00171 goto error_exit; \ 00172 } \ 00173 } 00174 00175 #define CHECK_PDQID(pdqid) { \ 00176 if (!VALID_PDQID(pdqid)) { \ 00177 ercd = E_ID; \ 00178 goto error_exit; \ 00179 } \ 00180 } 00181 00182 #define CHECK_MBXID(mbxid) { \ 00183 if (!VALID_MBXID(mbxid)) { \ 00184 ercd = E_ID; \ 00185 goto error_exit; \ 00186 } \ 00187 } 00188 00189 #define CHECK_MPFID(mpfid) { \ 00190 if (!VALID_MPFID(mpfid)) { \ 00191 ercd = E_ID; \ 00192 goto error_exit; \ 00193 } \ 00194 } 00195 00196 #define CHECK_CYCID(cycid) { \ 00197 if (!VALID_CYCID(cycid)) { \ 00198 ercd = E_ID; \ 00199 goto error_exit; \ 00200 } \ 00201 } 00202 00203 #define CHECK_ALMID(almid) { \ 00204 if (!VALID_ALMID(almid)) { \ 00205 ercd = E_ID; \ 00206 goto error_exit; \ 00207 } \ 00208 } 00209 00210 /* 00211 * 呼出しコンテキストのチェック(E_CTX) 00212 */ 00213 #define CHECK_TSKCTX() { \ 00214 if (sense_context()) { \ 00215 ercd = E_CTX; \ 00216 goto error_exit; \ 00217 } \ 00218 } 00219 00220 #define CHECK_INTCTX() { \ 00221 if (!sense_context()) { \ 00222 ercd = E_CTX; \ 00223 goto error_exit; \ 00224 } \ 00225 } 00226 00227 /* 00228 * 呼出しコンテキストとCPUロック状態のチェック(E_CTX) 00229 */ 00230 #define CHECK_TSKCTX_UNL() { \ 00231 if (sense_context() || t_sense_lock()) { \ 00232 ercd = E_CTX; \ 00233 goto error_exit; \ 00234 } \ 00235 } 00236 00237 #define CHECK_INTCTX_UNL() { \ 00238 if (!sense_context() || i_sense_lock()) { \ 00239 ercd = E_CTX; \ 00240 goto error_exit; \ 00241 } \ 00242 } 00243 00244 /* 00245 * ディスパッチ保留状態でないかのチェック(E_CTX) 00246 */ 00247 #define CHECK_DISPATCH() { \ 00248 if (sense_context() || t_sense_lock() || !dspflg) { \ 00249 ercd = E_CTX; \ 00250 goto error_exit; \ 00251 } \ 00252 } 00253 00254 /* 00255 * その他のコンテキストエラーのチェック(E_CTX) 00256 */ 00257 #define CHECK_CTX(exp) { \ 00258 if (!(exp)) { \ 00259 ercd = E_CTX; \ 00260 goto error_exit; \ 00261 } \ 00262 } 00263 00264 /* 00265 * 自タスクを指定していないかのチェック(E_ILUSE) 00266 */ 00267 #define CHECK_NONSELF(p_tcb) { \ 00268 if ((p_tcb) == p_runtsk) { \ 00269 ercd = E_ILUSE; \ 00270 goto error_exit; \ 00271 } \ 00272 } 00273 00274 /* 00275 * その他の不正使用エラーのチェック(E_ILUSE) 00276 */ 00277 #define CHECK_ILUSE(exp) { \ 00278 if (!(exp)) { \ 00279 ercd = E_ILUSE; \ 00280 goto error_exit; \ 00281 } \ 00282 } 00283 00284 #endif /* TOPPERS_CHECK_H */
Copyright © 2008 by Kijineko Inc.