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 によって生成されました。