t_stddef.h

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

ホームページ制作