itron.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-2003 by Embedded and Real-Time Systems Laboratory
00007  *                              Toyohashi Univ. of Technology, JAPAN
00008  *  Copyright (C) 2004 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: itron.h,v 1.1 2005/04/03 13:33:19 honda Exp $
00039  */
00040 
00041 /*
00042  *  ITRON仕様共通規定のデータ型・定数・マクロ
00043  *
00044  *  このファイルには,スタンダードプロファイルには必要ない定義も含んで
00045  *  いる.データ型の定義は,スタンダードプロファイルを満たすちょうどの
00046  *  長さにはしていない.
00047  *
00048  *  アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
00049  *  イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
00050  *  おくことで,マクロ定義以外の記述を除くことができる.
00051  *
00052  *  このインクルードファイルは,kernel.h と sil.h でインクルードされる.
00053  *  また,ITRON仕様共通規定に準拠するソフトウェア部品のインクルードファ
00054  *  イルは,このファイルを直接インクルードしてもよい.この例外を除いて,
00055  *  他のファイルから直接インクルードされることはない.
00056  *
00057  *  このファイルをインクルードする前に,t_stddef.h をインクルードして
00058  *  おくことが必要である.
00059  */
00060 
00061 #ifndef _ITRON_H_
00062 #define _ITRON_H_
00063 
00064 #ifdef __cplusplus
00065 extern "C" {
00066 #endif
00067 
00068 /*
00069  *  開発環境に依存する定義
00070  */
00071 #include <tool_defs.h>
00072 
00073 /*
00074  *  開発環境の標準インクルードファイル(NULL と size_t の定義が必要)
00075  *
00076  *  C++/EC++ では,標準仕様上は stddef.h がサポートされているとは限らな
00077  *  いが,ほとんどの処理系でサポートされている.
00078  */
00079 #ifndef _MACRO_ONLY
00080 #include <stddef.h>
00081 #endif /* _MACRO_ONLY */
00082 
00083 /*
00084  *  コンパイラ依存のデータ型のデフォルト定義
00085  */
00086 #ifndef _bool_
00087 #define _bool_      int     /* ブール型 */
00088 #endif /* _bool_ */
00089 
00090 /*
00091  *  ITRON仕様共通データ型
00092  */
00093 #ifndef _MACRO_ONLY
00094 
00095 #ifdef _int8_
00096 typedef signed _int8_       B;  /* 符号付き8ビット整数 */
00097 typedef unsigned _int8_     UB; /* 符号無し8ビット整数 */
00098 typedef _int8_          VB; /* 型が定まらない8ビットの値 */
00099 #endif /* _int8_ */
00100 
00101 #ifdef _int16_
00102 typedef signed _int16_      H;  /* 符号付き16ビット整数 */
00103 typedef unsigned _int16_    UH; /* 符号無し16ビット整数 */
00104 typedef _int16_         VH; /* 型が定まらない16ビットの値 */
00105 #endif /* _int16_ */
00106 
00107 typedef signed _int32_      W;  /* 符号付き32ビット整数 */
00108 typedef unsigned _int32_    UW; /* 符号無し32ビット整数 */
00109 typedef _int32_         VW; /* 型が定まらない32ビットの値 */
00110 
00111 #ifdef _int64_
00112 typedef signed _int64_      D;  /* 符号付き64ビット整数 */
00113 typedef unsigned _int64_    UD; /* 符号無し64ビット整数 */
00114 typedef _int64_         VD; /* 型が定まらない64ビットの値 */
00115 #endif /* _int64_ */
00116 
00117 typedef void        *VP;        /* 型が定まらないものへのポインタ */
00118 typedef void        (*FP)();    /* プログラムの起動番地(ポインタ) */
00119 
00120 typedef signed int  INT;        /* 自然なサイズの符号付き整数 */
00121 typedef unsigned int    UINT;       /* 自然なサイズの符号無し整数 */
00122 
00123 typedef _bool_      BOOL;       /* 真偽値 */
00124 
00125 typedef INT     FN;     /* 機能コード */
00126 typedef INT     ER;     /* エラーコード */
00127 typedef INT     ID;     /* オブジェクトのID番号 */
00128 typedef UINT        ATR;        /* オブジェクトの属性 */
00129 typedef UINT        STAT;       /* オブジェクトの状態 */
00130 typedef UINT        MODE;       /* サービスコールの動作モード */
00131 typedef INT     PRI;        /* 優先度 */
00132 typedef size_t      SIZE;       /* メモリ領域のサイズ */
00133 
00134 typedef INT     TMO;        /* タイムアウト指定 */
00135 typedef UINT        RELTIM;     /* 相対時間 */
00136 typedef UW      SYSTIM;     /* システム時刻 */
00137 
00138 #ifdef _vp_int_
00139 typedef _vp_int_    VP_INT;     /* VP または INT */
00140 #else /* _vp_int_ */
00141 typedef VP      VP_INT;     /* VP または INT */
00142 #endif /* _vp_int_ */
00143 
00144 typedef INT     ER_BOOL;    /* ER または BOOL */
00145 typedef INT     ER_ID;      /* ER または ID */
00146 typedef INT     ER_UINT;    /* ER または UINT */
00147 
00148 #endif /* _MACRO_ONLY */
00149 
00150 /*
00151  *  ITRON仕様共通定数
00152  */
00153 
00154 /*
00155  *  一般
00156  *
00157  *  _MACRO_ONLY の時には,NULL を定義しない.これは,_MACRO_ONLY の時
00158  *  はstddef.h をインクルードしないため,そうでない時と NULL の定義が
00159  *  食い違う可能性があるためである.また,システムコンフィギュレーショ
00160  *  ンファイルを処理する場合には NULL を定義してはならないため,その点
00161  *  からも定義しない方が都合がよい.
00162  */
00163 #ifndef _MACRO_ONLY
00164 #ifndef NULL                /* stddef.h に含まれているはず */
00165 #define NULL        0       /* 無効ポインタ */
00166 #endif /* NULL */
00167 #endif /* _MACRO_ONLY */
00168 
00169 #define TRUE        1       /* 真 */
00170 #define FALSE       0       /* 偽 */
00171 #define E_OK        0       /* 正常終了 */
00172 
00173 /*
00174  *  エラーコード
00175  */
00176 #define E_SYS       (-5)        /* システムエラー */
00177 #define E_NOSPT     (-9)        /* 未サポート機能 */
00178 #define E_RSFN      (-10)       /* 予約機能コード */
00179 #define E_RSATR     (-11)       /* 予約属性 */
00180 #define E_PAR       (-17)       /* パラメータエラー */
00181 #define E_ID        (-18)       /* 不正ID番号 */
00182 #define E_CTX       (-25)       /* コンテキストエラー */
00183 #define E_MACV      (-26)       /* メモリアクセス違反 */
00184 #define E_OACV      (-27)       /* オブジェクトアクセス違反 */
00185 #define E_ILUSE     (-28)       /* サービスコール不正使用 */
00186 #define E_NOMEM     (-33)       /* メモリ不足 */
00187 #define E_NOID      (-34)       /* ID番号不足 */
00188 #define E_OBJ       (-41)       /* オブジェクト状態エラー */
00189 #define E_NOEXS     (-42)       /* オブジェクト未生成 */
00190 #define E_QOVR      (-43)       /* キューイングオーバーフロー */
00191 #define E_RLWAI     (-49)       /* 待ち状態の強制解除 */
00192 #define E_TMOUT     (-50)       /* ポーリング失敗またはタイムアウト */
00193 #define E_DLT       (-51)       /* 待ちオブジェクトの削除 */
00194 #define E_CLS       (-52)       /* 待ちオブジェクトの状態変化 */
00195 #define E_WBLK      (-57)       /* ノンブロッキング受付け */
00196 #define E_BOVR      (-58)       /* バッファオーバーフロー */
00197 
00198 /*
00199  *  オブジェクト属性
00200  */
00201 #define TA_NULL     0u      /* オブジェクト属性を指定しない */
00202 
00203 /*
00204  *  タイムアウト指定
00205  */
00206 #define TMO_POL     0       /* ポーリング */
00207 #define TMO_FEVR    (-1)        /* 永久待ち */
00208 #define TMO_NBLK    (-2)        /* ノンブロッキング */
00209 
00210 /*
00211  *  ITRON仕様共通マクロ
00212  */
00213 
00214 /*
00215  *  エラーコード生成・分解マクロ
00216  *
00217  *  ANSI C言語の規格では,右シフト演算子(>>)が符号拡張されることを保
00218  *  証していないため,SERCDマクロの定義を単に ((ercd) >> 8) とすると,
00219  *  右シフト演算子を符号拡張しないコンパイラでは,SERCD の返値が正の値
00220  *  になってしまう.
00221  */
00222 #define ERCD(mercd,sercd)   (((sercd) << 8) | ((mercd) & 0xff))
00223 
00224 #ifdef _int8_
00225 #define MERCD(ercd)     ((ER)((B)(ercd)))
00226 #define SERCD(ercd)     ((ER)((B)((ercd) >> 8)))
00227 #else /* _int8_ */
00228 #define MERCD(ercd)     (((ercd) & 0x80) == 0 ? ((ercd) & 0xff) \
00229                             : ((ercd) | ~0xff))
00230 #define SERCD(ercd)     ((~((~0) >> 8)) | ((ercd) >> 8))
00231 #endif /* _int8_ */
00232 
00233 #ifdef __cplusplus
00234 }
00235 #endif
00236 
00237 #endif /* _ITRON_H_ */

Copyright © 2006 by TAKAGI Nobuhisa.
このページは Mon Apr 3 23:49:12 2006 に Doxygen によって生成されました。