|
|
check.h説明を見る。00001 /* 00002 * TOPPERS/JSP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Just Standard Profile Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * 00009 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00010 * によって公表されている GNU General Public License の Version 2 に記 00011 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 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 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00032 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00033 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00034 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00035 * 00036 * @(#) $Id: check.h,v 1.7 2003/06/04 01:46:16 hiro Exp $ 00037 */ 00038 00039 /* 00040 * エラーチェック用マクロ 00041 */ 00042 00043 #ifndef _CHECK_H_ 00044 #define _CHECK_H_ 00045 00046 /* 00047 * 優先度の範囲の判定 00048 */ 00049 #define VALID_TPRI(tpri) \ 00050 (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI) 00051 00052 /* 00053 * タスク優先度のチェック(E_PAR) 00054 */ 00055 #define CHECK_TPRI(tpri) { \ 00056 if (!VALID_TPRI(tpri)) { \ 00057 ercd = E_PAR; \ 00058 goto exit; \ 00059 } \ 00060 } 00061 00062 #define CHECK_TPRI_INI(tpri) { \ 00063 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_INI)) { \ 00064 ercd = E_PAR; \ 00065 goto exit; \ 00066 } \ 00067 } 00068 00069 #define CHECK_TPRI_SELF(tpri) { \ 00070 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_SELF)) { \ 00071 ercd = E_PAR; \ 00072 goto exit; \ 00073 } \ 00074 } 00075 00076 /* 00077 * タイムアウト指定値のチェック(E_PAR) 00078 */ 00079 #define CHECK_TMOUT(tmout) { \ 00080 if (!(TMO_FEVR <= (tmout))) { \ 00081 ercd = E_PAR; \ 00082 goto exit; \ 00083 } \ 00084 } 00085 00086 /* 00087 * その他のパラメータエラーのチェック(E_PAR) 00088 */ 00089 #define CHECK_PAR(exp) { \ 00090 if (!(exp)) { \ 00091 ercd = E_PAR; \ 00092 goto exit; \ 00093 } \ 00094 } 00095 00096 /* 00097 * オブジェクトIDの範囲の判定 00098 */ 00099 #define VALID_TSKID(tskid) \ 00100 (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid) 00101 00102 #define VALID_SEMID(semid) \ 00103 (TMIN_SEMID <= (semid) && (semid) <= tmax_semid) 00104 00105 #define VALID_FLGID(flgid) \ 00106 (TMIN_FLGID <= (flgid) && (flgid) <= tmax_flgid) 00107 00108 #define VALID_DTQID(dtqid) \ 00109 (TMIN_DTQID <= (dtqid) && (dtqid) <= tmax_dtqid) 00110 00111 #define VALID_MBXID(mbxid) \ 00112 (TMIN_MBXID <= (mbxid) && (mbxid) <= tmax_mbxid) 00113 00114 #define VALID_MPFID(mpfid) \ 00115 (TMIN_MPFID <= (mpfid) && (mpfid) <= tmax_mpfid) 00116 00117 #define VALID_CYCID(cycid) \ 00118 (TMIN_CYCID <= (cycid) && (cycid) <= tmax_cycid) 00119 00120 /* 00121 * オブジェクトIDのチェック(E_ID) 00122 */ 00123 #define CHECK_TSKID(tskid) { \ 00124 if (!VALID_TSKID(tskid)) { \ 00125 ercd = E_ID; \ 00126 goto exit; \ 00127 } \ 00128 } 00129 00130 #define CHECK_TSKID_SELF(tskid) { \ 00131 if (!(VALID_TSKID(tskid) || (tskid) == TSK_SELF)) { \ 00132 ercd = E_ID; \ 00133 goto exit; \ 00134 } \ 00135 } 00136 00137 #define CHECK_SEMID(semid) { \ 00138 if (!VALID_SEMID(semid)) { \ 00139 ercd = E_ID; \ 00140 goto exit; \ 00141 } \ 00142 } 00143 00144 #define CHECK_FLGID(flgid) { \ 00145 if (!VALID_FLGID(flgid)) { \ 00146 ercd = E_ID; \ 00147 goto exit; \ 00148 } \ 00149 } 00150 00151 #define CHECK_DTQID(dtqid) { \ 00152 if (!VALID_DTQID(dtqid)) { \ 00153 ercd = E_ID; \ 00154 goto exit; \ 00155 } \ 00156 } 00157 00158 #define CHECK_MBXID(mbxid) { \ 00159 if (!VALID_MBXID(mbxid)) { \ 00160 ercd = E_ID; \ 00161 goto exit; \ 00162 } \ 00163 } 00164 00165 #define CHECK_MPFID(mpfid) { \ 00166 if (!VALID_MPFID(mpfid)) { \ 00167 ercd = E_ID; \ 00168 goto exit; \ 00169 } \ 00170 } 00171 00172 #define CHECK_CYCID(cycid) { \ 00173 if (!VALID_CYCID(cycid)) { \ 00174 ercd = E_ID; \ 00175 goto exit; \ 00176 } \ 00177 } 00178 00179 /* 00180 * 呼出しコンテキストのチェック(E_CTX) 00181 */ 00182 #define CHECK_TSKCTX() { \ 00183 if (sense_context()) { \ 00184 ercd = E_CTX; \ 00185 goto exit; \ 00186 } \ 00187 } 00188 00189 #define CHECK_INTCTX() { \ 00190 if (!sense_context()) { \ 00191 ercd = E_CTX; \ 00192 goto exit; \ 00193 } \ 00194 } 00195 00196 /* 00197 * 呼出しコンテキストとCPUロック状態のチェック(E_CTX) 00198 */ 00199 #define CHECK_TSKCTX_UNL() { \ 00200 if (sense_context() || t_sense_lock()) { \ 00201 ercd = E_CTX; \ 00202 goto exit; \ 00203 } \ 00204 } 00205 00206 #define CHECK_INTCTX_UNL() { \ 00207 if (!sense_context() || i_sense_lock()) { \ 00208 ercd = E_CTX; \ 00209 goto exit; \ 00210 } \ 00211 } 00212 00213 /* 00214 * ディスパッチ保留状態でないかのチェック(E_CTX) 00215 */ 00216 #define CHECK_DISPATCH() { \ 00217 if (sense_context() || t_sense_lock() || !(enadsp)) { \ 00218 ercd = E_CTX; \ 00219 goto exit; \ 00220 } \ 00221 } 00222 00223 /* 00224 * その他のコンテキストエラーのチェック(E_CTX) 00225 */ 00226 #define CHECK_CTX(exp) { \ 00227 if (!(exp)) { \ 00228 ercd = E_CTX; \ 00229 goto exit; \ 00230 } \ 00231 } 00232 00233 /* 00234 * 自タスクを指定していないかのチェック(E_ILUSE) 00235 */ 00236 #define CHECK_NONSELF(tcb) { \ 00237 if ((tcb) == runtsk) { \ 00238 ercd = E_ILUSE; \ 00239 goto exit; \ 00240 } \ 00241 } 00242 00243 /* 00244 * その他の不正使用エラーのチェック(E_ILUSE) 00245 */ 00246 #define CHECK_ILUSE(exp) { \ 00247 if (!(exp)) { \ 00248 ercd = E_ILUSE; \ 00249 goto exit; \ 00250 } \ 00251 } 00252 00253 #endif /* _CHECK_H_ */ 00254 Copyright © 2006 by TAKAGI Nobuhisa. Copyright © 2006 by Kijineko Inc.. このページは Mon Dec 18 17:18:39 2006 に Doxygen によって生成されました。 データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】 |