OSDN Git Service

最初のコミット。sample1が通る。
[uzume/uzume_bfin.git] / uzume_prototype / kernel / include / itron.h
1 /*
2  *  TOPPERS/JSP Kernel
3  *      Toyohashi Open Platform for Embedded Real-Time Systems/
4  *      Just Standard Profile Kernel
5  * 
6  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7  *                              Toyohashi Univ. of Technology, JAPAN
8  *  Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
9  *              Graduate School of Information Science, Nagoya Univ., JAPAN
10  * 
11  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
12  *  によって公表されている GNU General Public License の Version 2 に記
13  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
15  *  利用と呼ぶ)することを無償で許諾する.
16  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18  *      スコード中に含まれていること.
19  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22  *      の無保証規定を掲載すること.
23  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25  *      と.
26  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
28  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29  *        報告すること.
30  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32  * 
33  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
35  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
36  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
37  * 
38  *  @(#) $Id: itron.h,v 1.1 2009/01/31 05:27:37 suikan Exp $
39  */
40
41 /*
42  *  ITRON仕様共通規定のデータ型・定数・マクロ
43  *
44  *  このファイルには,スタンダードプロファイルには必要ない定義も含んで
45  *  いる.データ型の定義は,スタンダードプロファイルを満たすちょうどの
46  *  長さにはしていない.
47  *
48  *  アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
49  *  イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
50  *  おくことで,マクロ定義以外の記述を除くことができる.
51  *
52  *  このインクルードファイルは,kernel.h と sil.h でインクルードされる.
53  *  また,ITRON仕様共通規定に準拠するソフトウェア部品のインクルードファ
54  *  イルは,このファイルを直接インクルードしてもよい.この例外を除いて,
55  *  他のファイルから直接インクルードされることはない.
56  *
57  *  このファイルをインクルードする前に,t_stddef.h をインクルードして
58  *  おくことが必要である.
59  */
60
61 #ifndef _ITRON_H_
62 #define _ITRON_H_
63
64 #ifdef __cplusplus
65 extern "C" {
66 #endif
67
68 /*
69  *  開発環境に依存する定義
70  */
71 #include <tool_defs.h>
72
73 /*
74  *  開発環境の標準インクルードファイル(NULL と size_t の定義が必要)
75  *
76  *  C++/EC++ では,標準仕様上は stddef.h がサポートされているとは限らな
77  *  いが,ほとんどの処理系でサポートされている.
78  */
79 #ifndef _MACRO_ONLY
80 #include <stddef.h>
81 #endif /* _MACRO_ONLY */
82
83 /*
84  *  コンパイラ依存のデータ型のデフォルト定義
85  */
86 #ifndef _bool_
87 #define _bool_      int     /* ブール型 */
88 #endif /* _bool_ */
89
90 /*
91  *  ITRON仕様共通データ型
92  */
93 #ifndef _MACRO_ONLY
94
95 #ifdef _int8_
96 typedef signed _int8_       B;  /* 符号付き8ビット整数 */
97 typedef unsigned _int8_     UB; /* 符号無し8ビット整数 */
98 typedef _int8_          VB; /* 型が定まらない8ビットの値 */
99 #endif /* _int8_ */
100
101 #ifdef _int16_
102 typedef signed _int16_      H;  /* 符号付き16ビット整数 */
103 typedef unsigned _int16_    UH; /* 符号無し16ビット整数 */
104 typedef _int16_         VH; /* 型が定まらない16ビットの値 */
105 #endif /* _int16_ */
106
107 typedef signed _int32_      W;  /* 符号付き32ビット整数 */
108 typedef unsigned _int32_    UW; /* 符号無し32ビット整数 */
109 typedef _int32_         VW; /* 型が定まらない32ビットの値 */
110
111 #ifdef _int64_
112 typedef signed _int64_      D;  /* 符号付き64ビット整数 */
113 typedef unsigned _int64_    UD; /* 符号無し64ビット整数 */
114 typedef _int64_         VD; /* 型が定まらない64ビットの値 */
115 #endif /* _int64_ */
116
117 typedef void        *VP;        /* 型が定まらないものへのポインタ */
118 typedef void        (*FP)();    /* プログラムの起動番地(ポインタ) */
119
120 typedef signed int  INT;        /* 自然なサイズの符号付き整数 */
121 typedef unsigned int    UINT;       /* 自然なサイズの符号無し整数 */
122
123 typedef _bool_      BOOL;       /* 真偽値 */
124
125 typedef INT     FN;     /* 機能コード */
126 typedef INT     ER;     /* エラーコード */
127 typedef INT     ID;     /* オブジェクトのID番号 */
128 typedef UINT        ATR;        /* オブジェクトの属性 */
129 typedef UINT        STAT;       /* オブジェクトの状態 */
130 typedef UINT        MODE;       /* サービスコールの動作モード */
131 typedef INT     PRI;        /* 優先度 */
132 typedef size_t      SIZE;       /* メモリ領域のサイズ */
133
134 typedef INT     TMO;        /* タイムアウト指定 */
135 typedef UINT        RELTIM;     /* 相対時間 */
136 typedef UW      SYSTIM;     /* システム時刻 */
137
138 #ifdef _vp_int_
139 typedef _vp_int_    VP_INT;     /* VP または INT */
140 #else /* _vp_int_ */
141 typedef VP      VP_INT;     /* VP または INT */
142 #endif /* _vp_int_ */
143
144 typedef INT     ER_BOOL;    /* ER または BOOL */
145 typedef INT     ER_ID;      /* ER または ID */
146 typedef INT     ER_UINT;    /* ER または UINT */
147
148 #endif /* _MACRO_ONLY */
149
150 /*
151  *  ITRON仕様共通定数
152  */
153
154 /*
155  *  一般
156  *
157  *  _MACRO_ONLY の時には,NULL を定義しない.これは,_MACRO_ONLY の時
158  *  はstddef.h をインクルードしないため,そうでない時と NULL の定義が
159  *  食い違う可能性があるためである.また,システムコンフィギュレーショ
160  *  ンファイルを処理する場合には NULL を定義してはならないため,その点
161  *  からも定義しない方が都合がよい.
162  */
163 #ifndef _MACRO_ONLY
164 #ifndef NULL                /* stddef.h に含まれているはず */
165 #define NULL        0       /* 無効ポインタ */
166 #endif /* NULL */
167 #endif /* _MACRO_ONLY */
168
169 #define TRUE        1       /* 真 */
170 #define FALSE       0       /* 偽 */
171 #define E_OK        0       /* 正常終了 */
172
173 /*
174  *  エラーコード
175  */
176 #define E_SYS       (-5)        /* システムエラー */
177 #define E_NOSPT     (-9)        /* 未サポート機能 */
178 #define E_RSFN      (-10)       /* 予約機能コード */
179 #define E_RSATR     (-11)       /* 予約属性 */
180 #define E_PAR       (-17)       /* パラメータエラー */
181 #define E_ID        (-18)       /* 不正ID番号 */
182 #define E_CTX       (-25)       /* コンテキストエラー */
183 #define E_MACV      (-26)       /* メモリアクセス違反 */
184 #define E_OACV      (-27)       /* オブジェクトアクセス違反 */
185 #define E_ILUSE     (-28)       /* サービスコール不正使用 */
186 #define E_NOMEM     (-33)       /* メモリ不足 */
187 #define E_NOID      (-34)       /* ID番号不足 */
188 #define E_OBJ       (-41)       /* オブジェクト状態エラー */
189 #define E_NOEXS     (-42)       /* オブジェクト未生成 */
190 #define E_QOVR      (-43)       /* キューイングオーバーフロー */
191 #define E_RLWAI     (-49)       /* 待ち状態の強制解除 */
192 #define E_TMOUT     (-50)       /* ポーリング失敗またはタイムアウト */
193 #define E_DLT       (-51)       /* 待ちオブジェクトの削除 */
194 #define E_CLS       (-52)       /* 待ちオブジェクトの状態変化 */
195 #define E_WBLK      (-57)       /* ノンブロッキング受付け */
196 #define E_BOVR      (-58)       /* バッファオーバーフロー */
197
198 /*
199  *  オブジェクト属性
200  */
201 #define TA_NULL     0u      /* オブジェクト属性を指定しない */
202
203 /*
204  *  タイムアウト指定
205  */
206 #define TMO_POL     0       /* ポーリング */
207 #define TMO_FEVR    (-1)        /* 永久待ち */
208 #define TMO_NBLK    (-2)        /* ノンブロッキング */
209
210 /*
211  *  ITRON仕様共通マクロ
212  */
213
214 /*
215  *  エラーコード生成・分解マクロ
216  *
217  *  ANSI C言語の規格では,右シフト演算子(>>)が符号拡張されることを保
218  *  証していないため,SERCDマクロの定義を単に ((ercd) >> 8) とすると,
219  *  右シフト演算子を符号拡張しないコンパイラでは,SERCD の返値が正の値
220  *  になってしまう.
221  */
222 #define ERCD(mercd,sercd)   (((sercd) << 8) | ((mercd) & 0xff))
223
224 #ifdef _int8_
225 #define MERCD(ercd)     ((ER)((B)(ercd)))
226 #define SERCD(ercd)     ((ER)((B)((ercd) >> 8)))
227 #else /* _int8_ */
228 #define MERCD(ercd)     (((ercd) & 0x80) == 0 ? ((ercd) & 0xff) \
229                             : ((ercd) | ~0xff))
230 #define SERCD(ercd)     ((~((~0) >> 8)) | ((ercd) >> 8))
231 #endif /* _int8_ */
232
233 #ifdef __cplusplus
234 }
235 #endif
236
237 #endif /* _ITRON_H_ */