check.h

説明を見る。
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.

ホームページ制作