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】