|
|
check.h説明を見る。00001 /* 00002 * TOPPERS/FDMP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Function Distributed Multiprocessor Kernel 00005 * 00006 * Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 00012 * によって公表されている GNU General Public License の Version 2 に記 00013 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア 00014 * を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下, 00015 * 利用と呼ぶ)することを無償で許諾する. 00016 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00017 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00018 * スコード中に含まれていること. 00019 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00020 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00021 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00022 * の無保証規定を掲載すること. 00023 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00024 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00025 * と. 00026 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00027 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00028 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00029 * 報告すること. 00030 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00031 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00032 * 00033 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00034 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 00035 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 00036 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 00037 * 00038 * @(#) $Id: check.h,v 1.1 2005/04/03 13:33:19 honda Exp $ 00039 */ 00040 00051 #ifndef _CHECK_H_ 00052 #define _CHECK_H_ 00053 00057 #define VALID_TPRI(tpri) \ 00058 (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI) 00059 00063 #define CHECK_TPRI(tpri) { \ 00064 if (!VALID_TPRI(tpri)) { \ 00065 ercd = E_PAR; \ 00066 goto exit; \ 00067 } \ 00068 } 00069 00070 #define CHECK_TPRI_INI(tpri) { \ 00071 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_INI)) { \ 00072 ercd = E_PAR; \ 00073 goto exit; \ 00074 } \ 00075 } 00076 00077 #define CHECK_TPRI_SELF(tpri) { \ 00078 if (!(VALID_TPRI(tpri) || (tpri) == TPRI_SELF)) { \ 00079 ercd = E_PAR; \ 00080 goto exit; \ 00081 } \ 00082 } 00083 00087 #define CHECK_TMOUT(tmout) { \ 00088 if (!(TMO_FEVR <= (tmout))) { \ 00089 ercd = E_PAR; \ 00090 goto exit; \ 00091 } \ 00092 } 00093 00097 #define CHECK_PAR(exp) { \ 00098 if (!(exp)) { \ 00099 ercd = E_PAR; \ 00100 goto exit; \ 00101 } \ 00102 } 00103 00107 #define VALID_TSKID(cbtcb, tskid) \ 00108 (TMIN_ID <= (tskid) && (tskid) <= (cbtcb).max_id) 00109 00110 #define VALID_SEMID(cbtcb, semid) \ 00111 (TMIN_ID <= (semid) && (semid) <= (cbtcb).max_id) 00112 00113 #define VALID_FLGID(cbtcb, flgid) \ 00114 (TMIN_ID <= (flgid) && (flgid) <= (cbtcb).max_id) 00115 00116 #define VALID_DTQID(cbtcb, dtqid) \ 00117 (TMIN_ID <= (dtqid) && (dtqid) <= (cbtcb).max_id) 00118 00119 #define VALID_MBXID(cbtcb, mbxid) \ 00120 (TMIN_ID <= (mbxid) && (mbxid) <= (cbtcb).max_id) 00121 00122 #define VALID_MPFID(cbtcb, mpfid) \ 00123 (TMIN_ID <= (mpfid) && (mpfid) <= (cbtcb).max_id) 00124 00125 #define VALID_CYCID(cbtcb, cycid) \ 00126 (TMIN_ID <= (cycid) && (cycid) <= (cbtcb).max_id) 00127 00128 /* 00129 * オブジェクトIDのチェック(E_ID) 00130 */ 00131 #define CHECK_TSKID(ccb, tskid) { \ 00132 if (!VALID_TSKID(ccb->tsk, tskid)) { \ 00133 ercd = E_ID; \ 00134 goto exit; \ 00135 } \ 00136 } 00137 00138 #define CHECK_TSKID_SELF(ccb, tskid) { \ 00139 if (!(VALID_TSKID(ccb->tsk, tskid) || (tskid) == TSK_SELF)) { \ 00140 ercd = E_ID; \ 00141 goto exit; \ 00142 } \ 00143 } 00144 00145 #define CHECK_SEMID(ccb, semid) { \ 00146 if (!VALID_SEMID(ccb->sem, semid)) { \ 00147 ercd = E_ID; \ 00148 goto exit; \ 00149 } \ 00150 } 00151 00152 #define CHECK_FLGID(ccb, flgid) { \ 00153 if (!VALID_FLGID(ccb->sem, flgid)) { \ 00154 ercd = E_ID; \ 00155 goto exit; \ 00156 } \ 00157 } 00158 00159 #define CHECK_DTQID(ccb, dtqid) { \ 00160 if (!VALID_DTQID(ccb->dtq, dtqid)) { \ 00161 ercd = E_ID; \ 00162 goto exit; \ 00163 } \ 00164 } 00165 00166 #define CHECK_MBXID(ccb, mbxid) { \ 00167 if (!VALID_MBXID(ccb->mbx, mbxid)) { \ 00168 ercd = E_ID; \ 00169 goto exit; \ 00170 } \ 00171 } 00172 00173 #define CHECK_MPFID(ccb, mpfid) { \ 00174 if (!VALID_MPFID(ccb->mpf, mpfid)) { \ 00175 ercd = E_ID; \ 00176 goto exit; \ 00177 } \ 00178 } 00179 00180 #define CHECK_CYCID(ccb, cycid) { \ 00181 if (!VALID_CYCID(ccb->cyc, cycid)) { \ 00182 ercd = E_ID; \ 00183 goto exit; \ 00184 } \ 00185 } 00186 00187 /* 00188 * 呼出しコンテキストのチェック(E_CTX) 00189 */ 00190 #define CHECK_TSKCTX() { \ 00191 if (sense_context()) { \ 00192 ercd = E_CTX; \ 00193 goto exit; \ 00194 } \ 00195 } 00196 00197 #define CHECK_INTCTX() { \ 00198 if (!sense_context()) { \ 00199 ercd = E_CTX; \ 00200 goto exit; \ 00201 } \ 00202 } 00203 00204 /* 00205 * 呼出しコンテキストとCPUロック状態のチェック(E_CTX) 00206 */ 00207 #define CHECK_TSKCTX_UNL() { \ 00208 if (sense_context() || t_sense_lock()) { \ 00209 ercd = E_CTX; \ 00210 goto exit; \ 00211 } \ 00212 } 00213 00214 #define CHECK_INTCTX_UNL() { \ 00215 if (!sense_context() || i_sense_lock()) { \ 00216 ercd = E_CTX; \ 00217 goto exit; \ 00218 } \ 00219 } 00220 00224 #define CHECK_DISPATCH() { \ 00225 if (sense_context() || t_sense_lock() || !(enadsp)) { \ 00226 ercd = E_CTX; \ 00227 goto exit; \ 00228 } \ 00229 } 00230 00234 #define CHECK_CTX(exp) { \ 00235 if (!(exp)) { \ 00236 ercd = E_CTX; \ 00237 goto exit; \ 00238 } \ 00239 } 00240 00244 #define CHECK_NONSELF(tcb) { \ 00245 if ((tcb) == runtsk) { \ 00246 ercd = E_ILUSE; \ 00247 goto exit; \ 00248 } \ 00249 } 00250 00254 #define CHECK_ILUSE(exp) { \ 00255 if (!(exp)) { \ 00256 ercd = E_ILUSE; \ 00257 goto exit; \ 00258 } \ 00259 } 00260 00261 #endif /* _CHECK_H_ */ Copyright © 2006 by TAKAGI Nobuhisa. このページは Mon Apr 3 23:49:11 2006 に Doxygen によって生成されました。 |