source: asp3_wo_tecs/trunk/include/t_stddef.h@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

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