source: ssp_qb_r5f100le_cs/trunk/include/t_stddef.h

Last change on this file was 95, checked in by nmir-saito, 9 years ago

ファイルの mime-type 変更

  • Property svn:mime-type set to text/plain; charset=shift_jis
File size: 8.8 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2004-2009 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 * Copyright (C) 2015 by Naoki Saito
10 * Nagoya Municipal Industrial Research Institute, JAPAN
11 *
12 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
13 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
14 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
20 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * の無保証規定を掲載すること.
22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
24 * と.
25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
26 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
28 * 報告すること.
29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
30 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
31 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
32 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
33 * 免責すること.
34 *
35 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
36 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
37 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
38 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
39 * の責任を負わない.
40 *
41 * @(#) $Id: t_stddef.h 1513 2009-04-22 07:35:20Z ertl-hiro $
42 */
43
44/*
45 * TOPPERS共通ヘッダファイル
46 *
47 * TOPPERS関連のすべてのソースファイルでインクルードすべきヘッダファイ
48 * ル.各種のカーネルやソフトウェア部品で共通に用いることを想定してい
49 * る.TOPPERSの各種のカーネルやソフトウェア部品で共通に用いるデータ型,
50 * 定数,マクロの定義などを含む.
51 *
52 * アセンブリ言語のソースファイルからこのファイルをインクルードする時
53 * は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を
54 * 除くようになっている.
55 *
56 * このファイルをインクルードする前にインクルードしておくべきファイル
57 * はない.
58 */
59
60#ifndef TOPPERS_T_STDDEF_H
61#define TOPPERS_T_STDDEF_H
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67/*
68 * ターゲット依存部
69 */
70#include "target_stddef.h"
71
72/*
73 * C言語/EC++でthrow()に対処するための定義
74 */
75#if !defined(__cplusplus) || defined(__embedded_cplusplus)
76#define throw()
77#endif
78
79#ifndef TOPPERS_MACRO_ONLY
80
81/*
82 * ターゲット依存のデータ型のマクロのデフォルト定義
83 */
84#ifndef TOPPERS_bool
85#define TOPPERS_bool int /* ブール型 */
86#endif /* TOPPERS_bool */
87
88#ifndef TOPPERS_size
89#define TOPPERS_size uintptr_t /* サイズ型 */
90#endif /* TOPPERS_size */
91
92#ifndef TOPPERS_fp
93struct TOPPERS_dummy_t { int TOPPERS_dummy_field; };
94typedef void (*TOPPERS_fp_t)(struct TOPPERS_dummy_t);
95#define TOPPERS_fp TOPPERS_fp_t /* プログラムの起動番地 */
96#endif /* TOPPERS_fp */
97
98/*
99 * 共通データ型
100 */
101typedef TOPPERS_bool bool_t; /* 真偽値 */
102
103typedef signed int int_t; /* 自然なサイズの符号付き整数 */
104typedef unsigned int uint_t; /* 自然なサイズの符号無し整数 */
105
106typedef signed long long_t; /* 長めのサイズの符号付き整数 */
107typedef unsigned long ulong_t; /* 長めのサイズの符号無し整数 */
108
109typedef int_t FN; /* 機能コード */
110typedef int_t ER; /* エラーコード */
111typedef int_t ID; /* オブジェクトのID番号 */
112typedef uint_t ATR; /* オブジェクトの属性 */
113typedef uint_t STAT; /* オブジェクトの状態 */
114typedef uint_t MODE; /* サービスコールの動作モード */
115typedef int_t PRI; /* 優先度 */
116typedef TOPPERS_size SIZE; /* メモリ領域のサイズ */
117
118typedef int_t TMO; /* タイムアウト指定 */
119typedef uint_t RELTIM; /* 相対時間 */
120typedef ulong_t SYSTIM; /* システム時刻 */
121typedef ulong_t SYSUTM; /* 性能評価用システム時刻 */
122
123typedef TOPPERS_fp FP; /* プログラムの起動番地 */
124
125typedef int_t ER_BOOL; /* エラーコードまたは真偽値 */
126typedef int_t ER_ID; /* エラーコードまたはID番号 */
127typedef int_t ER_UINT; /* エラーコードまたは符号無し整数 */
128
129typedef uint32_t ACPTN; /* アクセス許可パターン */
130typedef struct acvct { /* アクセス許可ベクタ */
131 ACPTN acptn1; /* 通常操作1のアクセス許可パターン */
132 ACPTN acptn2; /* 通常操作2のアクセス許可パターン */
133 ACPTN acptn3; /* 管理操作のアクセス許可パターン */
134 ACPTN acptn4; /* 参照操作のアクセス許可パターン */
135} ACVCT;
136
137#endif /* TOPPERS_MACRO_ONLY */
138
139/*
140 * 整数定数を作るマクロ
141 */
142#ifndef UINT_C
143#define UINT_C(val) (val ## U) /* uint_t型の定数を作るマクロ */
144#endif /* UINT_C */
145
146#ifndef ULONG_C
147#define ULONG_C(val) (val ## UL) /* ulong_t型の定数を作るマクロ */
148#endif /* ULONG_C */
149
150/*
151 * 一般定数
152 */
153#ifndef NULL
154#define NULL 0 /* 無効ポインタ */
155#endif /* NULL */
156
157#ifndef true
158#define true 1 /* 真 */
159#endif /* true */
160
161#ifndef false
162#define false 0 /* 偽 */
163#endif /* false */
164
165#define E_OK 0 /* 正常終了 */
166
167/*
168 * メインエラーコード
169 */
170#define E_SYS (-5) /* システムエラー */
171#define E_NOSPT (-9) /* 未サポート機能 */
172#define E_RSFN (-10) /* 予約機能コード */
173#define E_RSATR (-11) /* 予約属性 */
174#define E_PAR (-17) /* パラメータエラー */
175#define E_ID (-18) /* 不正ID番号 */
176#define E_CTX (-25) /* コンテキストエラー */
177#define E_MACV (-26) /* メモリアクセス違反 */
178#define E_OACV (-27) /* オブジェクトアクセス違反 */
179#define E_ILUSE (-28) /* サービスコール不正使用 */
180#define E_NOMEM (-33) /* メモリ不足 */
181#define E_NOID (-34) /* ID番号不足 */
182#define E_NORES (-35) /* 資源不足 */
183#define E_OBJ (-41) /* オブジェクト状態エラー */
184#define E_NOEXS (-42) /* オブジェクト未生成 */
185#define E_QOVR (-43) /* キューイングオーバーフロー */
186#define E_RLWAI (-49) /* 待ち状態の強制解除 */
187#define E_TMOUT (-50) /* ポーリング失敗またはタイムアウト */
188#define E_DLT (-51) /* 待ちオブジェクトの削除 */
189#define E_CLS (-52) /* 待ちオブジェクトの状態変化 */
190#define E_WBLK (-57) /* ノンブロッキング受付け */
191#define E_BOVR (-58) /* バッファオーバーフロー */
192
193/*
194 * オブジェクト属性
195 */
196#define TA_NULL UINT_C(0) /* オブジェクト属性を指定しない */
197
198/*
199 * タイムアウト指定
200 */
201#define TMO_POL 0 /* ポーリング */
202#define TMO_FEVR (-1) /* 永久待ち */
203#define TMO_NBLK (-2) /* ノンブロッキング */
204
205/*
206 * アクセス許可パターン
207 */
208#define TACP_KERNEL (0U) /* カーネルドメインだけにアクセスを許可 */
209#define TACP_SHARED (~0U) /* すべてのドメインからアクセスを許可 */
210
211/*
212 * 型に関する情報を取り出すためのマクロ
213 */
214#ifndef offsetof
215#define offsetof(structure, field) ((uintptr_t) &(((structure *) 0)->field))
216#endif /* offsetof */
217
218#ifndef alignof
219#define alignof(type) offsetof(struct { char field1; type field2; }, field2)
220#endif /* alignof */
221
222#ifndef ALIGN_TYPE /* アラインメントのチェック */
223#define ALIGN_TYPE(addr, type) \
224 ((((uintptr_t)(addr)) & (alignof(type) - 1)) == 0U)
225#endif /* ALIGN_TYPE */
226
227/*
228 * assertマクロ
229 */
230#undef assert
231#ifndef NDEBUG
232#define assert(exp) ((void)((exp) ? 0 : (TOPPERS_assert_fail(#exp, \
233 __FILE__, __LINE__), TOPPERS_assert_abort(), 0)))
234#else /* NDEBUG */
235#define assert(exp) ((void) 0)
236#endif /* NDEBUG */
237
238#ifdef __cplusplus
239}
240#endif
241
242/*
243 * エラーコード生成・分解マクロ
244 *
245 * 以下のマクロ定義は,符号付き整数が2の補数で表現されており,右シフト
246 * 演算子(>>)が算術シフトされることを仮定している.そうでない開発環
247 * 境では,target_stddef.hでこれらの定義を上書きしなければならない.
248 *
249 * MERCDマクロの定義は,メインエラーコードが負であることを仮定している.
250 * そうでない場合,2つの定義が一致しなくなる.
251 */
252#ifndef ERCD
253#define ERCD(mercd, sercd) \
254 ((ER)(((((uint_t) (sercd))) << 8) | ((((uint_t) (mercd))) & 0xffU)))
255#endif /* ERCD */
256
257#ifndef MERCD
258#ifdef INT8_MAX
259#define MERCD(ercd) ((ER)((int8_t)(ercd)))
260#else /* INT8_MAX */
261#define MERCD(ercd) ((ER)((((uint_t) (ercd))) | ~0xffU))
262#endif /* INT8_MAX */
263#endif /* MERCD */
264
265#ifndef SERCD
266#define SERCD(ercd) ((ER)((ercd) >> 8))
267#endif /* SERCD */
268
269/*
270 * 相対時間(RELTIM)に指定できる最大値
271 */
272#if UINT_MAX < LONG_MAX
273#define TMAX_RELTIM ((RELTIM) UINT_MAX)
274#else /* UINT_MAX < LONG_MAX */
275#define TMAX_RELTIM ((RELTIM) LONG_MAX)
276#endif /* UINT_MAX < LONG_MAX */
277
278#endif /* TOPPERS_T_STDDEF_H */
Note: See TracBrowser for help on using the repository browser.