00001 /* 00002 * TOPPERS Software 00003 * Toyohashi Open Platform for Embedded Real-Time Systems 00004 * 00005 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00006 * Toyohashi Univ. of Technology, JAPAN 00007 * Copyright (C) 2004-2008 by Embedded and Real-Time Systems Laboratory 00008 * Graduate School of Information Science, Nagoya Univ., JAPAN 00009 * 00010 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 00011 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 00012 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 00013 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00014 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00015 * スコード中に含まれていること. 00016 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00017 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00018 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00019 * の無保証規定を掲載すること. 00020 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00021 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00022 * と. 00023 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00024 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00025 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00026 * 報告すること. 00027 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00028 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00029 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 00030 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00031 * 免責すること. 00032 * 00033 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00034 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00035 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00036 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00037 * の責任を負わない. 00038 * 00039 * @(#) $Id: t_stddef.h 981 2008-04-21 23:45:39Z ertl-hiro $ 00040 */ 00041 00042 /* 00043 * TOPPERS共通ヘッダファイル 00044 * 00045 * TOPPERS関連のすべてのソースファイルでインクルードすべきヘッダファイ 00046 * ル.各種のカーネルやソフトウェア部品で共通に用いることを想定してい 00047 * る.TOPPERSの各種のカーネルやソフトウェア部品で共通に用いるデータ型, 00048 * 定数,マクロの定義などを含む. 00049 * 00050 * アセンブリ言語のソースファイルからこのファイルをインクルードする時 00051 * は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を 00052 * 除くようになっている. 00053 * 00054 * このファイルをインクルードする前にインクルードしておくべきファイル 00055 * はない. 00056 */ 00057 00058 #ifndef TOPPERS_T_STDDEF_H 00059 #define TOPPERS_T_STDDEF_H 00060 00061 #ifdef __cplusplus 00062 extern "C" { 00063 #endif 00064 00065 /* 00066 * ターゲット依存部 00067 */ 00068 #include "target_stddef.h" 00069 00070 /* 00071 * C言語/EC++でthrow()に対処するための定義 00072 */ 00073 #if !defined(__cplusplus) || defined(__embedded_cplusplus) 00074 #define throw() 00075 #endif 00076 00077 #ifndef TOPPERS_MACRO_ONLY 00078 00079 /* 00080 * ターゲット依存のデータ型のマクロのデフォルト定義 00081 */ 00082 #ifndef TOPPERS_bool 00083 #define TOPPERS_bool int /* ブール型 */ 00084 #endif /* TOPPERS_bool */ 00085 00086 #ifndef TOPPERS_size 00087 #define TOPPERS_size uintptr_t /* サイズ型 */ 00088 #endif /* TOPPERS_size */ 00089 00090 #ifndef TOPPERS_fp 00091 struct TOPPERS_dummy_t { int TOPPERS_dummy_field; }; 00092 typedef void (*TOPPERS_fp_t)(struct TOPPERS_dummy_t); 00093 #define TOPPERS_fp TOPPERS_fp_t /* プログラムの起動番地 */ 00094 #endif /* TOPPERS_fp */ 00095 00096 /* 00097 * 共通データ型 00098 */ 00099 typedef TOPPERS_bool bool_t; /* 真偽値 */ 00100 typedef unsigned char char_t; /* 符号無しの文字型 */ 00101 00102 typedef signed int int_t; /* 自然なサイズの符号付き整数 */ 00103 typedef unsigned int uint_t; /* 自然なサイズの符号無し整数 */ 00104 00105 typedef signed long long_t; /* 長めのサイズの符号付き整数 */ 00106 typedef unsigned long ulong_t; /* 長めのサイズの符号無し整数 */ 00107 00108 typedef int_t FN; /* 機能コード */ 00109 typedef int_t ER; /* エラーコード */ 00110 typedef int_t ID; /* オブジェクトのID番号 */ 00111 typedef uint_t ATR; /* オブジェクトの属性 */ 00112 typedef uint_t STAT; /* オブジェクトの状態 */ 00113 typedef uint_t MODE; /* サービスコールの動作モード */ 00114 typedef int_t PRI; /* 優先度 */ 00115 typedef TOPPERS_size SIZE; /* メモリ領域のサイズ */ 00116 00117 typedef int_t TMO; /* タイムアウト指定 */ 00118 typedef uint_t RELTIM; /* 相対時間 */ 00119 typedef ulong_t SYSTIM; /* システム時刻 */ 00120 typedef ulong_t SYSUTM; /* 性能評価用システム時刻 */ 00121 00122 typedef TOPPERS_fp FP; /* プログラムの起動番地 */ 00123 00124 typedef int_t ER_BOOL; /* エラーコードまたは真偽値 */ 00125 typedef int_t ER_ID; /* エラーコードまたはID番号 */ 00126 typedef int_t ER_UINT; /* エラーコードまたは符号無し整数 */ 00127 00128 typedef uint32_t ACPTN; /* アクセス許可パターン */ 00129 typedef struct { /* アクセス許可ベクタ */ 00130 ACPTN acptn1; /* 通常操作1のアクセス許可パターン */ 00131 ACPTN acptn2; /* 通常操作2のアクセス許可パターン */ 00132 ACPTN acptn3; /* 管理操作のアクセス許可パターン */ 00133 ACPTN acptn4; /* 参照操作のアクセス許可パターン */ 00134 } ACVCT; 00135 00136 #endif /* TOPPERS_MACRO_ONLY */ 00137 00138 /* 00139 * 整数定数を作るマクロ 00140 */ 00141 #ifndef UINT_C 00142 #define UINT_C(val) (val ## U) /* uint_t型の定数を作るマクロ */ 00143 #endif /* UINT_C */ 00144 00145 #ifndef ULONG_C 00146 #define ULONG_C(val) (val ## UL) /* ulong_t型の定数を作るマクロ */ 00147 #endif /* ULONG_C */ 00148 00149 /* 00150 * 一般定数 00151 */ 00152 #ifndef NULL 00153 #define NULL 0 /* 無効ポインタ */ 00154 #endif /* NULL */ 00155 00156 #ifndef true 00157 #define true 1 /* 真 */ 00158 #endif /* true */ 00159 00160 #ifndef false 00161 #define false 0 /* 偽 */ 00162 #endif /* false */ 00163 00164 #define E_OK 0 /* 正常終了 */ 00165 00166 /* 00167 * メインエラーコード 00168 */ 00169 #define E_SYS (-5) /* システムエラー */ 00170 #define E_NOSPT (-9) /* 未サポート機能 */ 00171 #define E_RSFN (-10) /* 予約機能コード */ 00172 #define E_RSATR (-11) /* 予約属性 */ 00173 #define E_PAR (-17) /* パラメータエラー */ 00174 #define E_ID (-18) /* 不正ID番号 */ 00175 #define E_CTX (-25) /* コンテキストエラー */ 00176 #define E_MACV (-26) /* メモリアクセス違反 */ 00177 #define E_OACV (-27) /* オブジェクトアクセス違反 */ 00178 #define E_ILUSE (-28) /* サービスコール不正使用 */ 00179 #define E_NOMEM (-33) /* メモリ不足 */ 00180 #define E_NOID (-34) /* ID番号不足 */ 00181 #define E_OBJ (-41) /* オブジェクト状態エラー */ 00182 #define E_NOEXS (-42) /* オブジェクト未生成 */ 00183 #define E_QOVR (-43) /* キューイングオーバーフロー */ 00184 #define E_RLWAI (-49) /* 待ち状態の強制解除 */ 00185 #define E_TMOUT (-50) /* ポーリング失敗またはタイムアウト */ 00186 #define E_DLT (-51) /* 待ちオブジェクトの削除 */ 00187 #define E_CLS (-52) /* 待ちオブジェクトの状態変化 */ 00188 #define E_WBLK (-57) /* ノンブロッキング受付け */ 00189 #define E_BOVR (-58) /* バッファオーバーフロー */ 00190 00191 /* 00192 * オブジェクト属性 00193 */ 00194 #define TA_NULL UINT_C(0) /* オブジェクト属性を指定しない */ 00195 00196 /* 00197 * タイムアウト指定 00198 */ 00199 #define TMO_POL 0 /* ポーリング */ 00200 #define TMO_FEVR (-1) /* 永久待ち */ 00201 #define TMO_NBLK (-2) /* ノンブロッキング */ 00202 00203 /* 00204 * アクセス許可パターン 00205 */ 00206 #define TACP_KERNEL (0U) /* カーネルドメインだけにアクセスを許可 */ 00207 #define TACP_SHARED (~0U) /* すべてのドメインにアクセスを許可 */ 00208 00209 /* 00210 * 型に関する情報を取り出すためのマクロ 00211 */ 00212 #ifndef offsetof 00213 #define offsetof(structure, field) ((uintptr_t) &(((structure *) 0)->field)) 00214 #endif /* offsetof */ 00215 00216 #ifndef alignof 00217 #define alignof(type) offsetof(struct { char field1; type field2; }, field2) 00218 #endif /* alignof */ 00219 00220 #ifndef ALIGN_TYPE /* アラインメントのチェック */ 00221 #define ALIGN_TYPE(addr, type) \ 00222 ((((uintptr_t)(addr)) & (alignof(type) - 1)) == 0U) 00223 #endif /* ALIGN_TYPE */ 00224 00225 /* 00226 * assertマクロ 00227 */ 00228 #undef assert 00229 #ifndef NDEBUG 00230 #define assert(exp) ((void)((exp) ? 0 : (TOPPERS_assert_fail(#exp, \ 00231 __FILE__, __LINE__), TOPPERS_assert_abort(), 0))) 00232 #else /* NDEBUG */ 00233 #define assert(exp) ((void) 0) 00234 #endif /* NDEBUG */ 00235 00236 #ifdef __cplusplus 00237 } 00238 #endif 00239 00240 /* 00241 * エラーコード生成・分解マクロ 00242 * 00243 * 以下のマクロ定義は,符号付き整数が2の補数で表現されており,右シフト 00244 * 演算子(>>)が算術シフトされることを仮定している.そうでない開発環 00245 * 境では,target_stddef.hでこれらの定義を上書きしなければならない. 00246 * 00247 * MERCDマクロの定義は,メインエラーコードが負であることを仮定している. 00248 * そうでない場合,2つの定義が一致しなくなる. 00249 */ 00250 #ifndef ERCD 00251 #define ERCD(mercd, sercd) \ 00252 ((ER)((((uint_t) sercd) << 8) | (((uint_t) mercd) & 0xffU))) 00253 #endif /* ERCD */ 00254 00255 #ifndef MERCD 00256 #ifdef INT8_MAX 00257 #define MERCD(ercd) ((ER)((int8_t)(ercd))) 00258 #else /* INT8_MAX */ 00259 #define MERCD(ercd) ((ER)(((uint_t) ercd) | ~0xffU)) 00260 #endif /* INT8_MAX */ 00261 #endif /* MERCD */ 00262 00263 #ifndef SERCD 00264 #define SERCD(ercd) ((ER)((ercd) >> 8)) 00265 #endif /* SERCD */ 00266 00267 /* 00268 * アクセス許可パターン生成マクロ 00269 */ 00270 #define TACP(domid) (1U << ((domid) - 1)) /* domidだけにアクセスを許可 */ 00271 00272 #endif /* TOPPERS_T_STDDEF_H */
Copyright © 2008 by Kijineko Inc.