source: EcnlProtoTool/trunk/asp3_dcre/include/t_stddef.h@ 439

Last change on this file since 439 was 429, checked in by coas-nagasima, 4 years ago

ASP3, TINET, mbed を更新

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