source: atk2-sc3_fl850f1l/kernel/kernel_impl.h@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 14.5 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2015 by Center for Embedded Computing Systems
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN
11 * Copyright (C) 2011-2013 by Spansion LLC, USA
12 * Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN
13 * Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
14 * Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
15 * Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN
16 * Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN
17 * Copyright (C) 2011-2015 by Witz Corporation
18 * Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN
19 * Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN
20 * Copyright (C) 2014-2015 by SCSK Corporation, JAPAN
21 *
22 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
23 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
24 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
25 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
26 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
27 * スコード中に含まれていること.
28 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
29 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
30 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
31 * の無保証規定を掲載すること.
32 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
33 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
34 * と.
35 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
36 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
37 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
41 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
43 * 免責すること.
44 *
45 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
46 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
47 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
48 * 用する者に対して,AUTOSARパートナーになることを求めている.
49 *
50 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
51 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
52 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
53 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
54 * の責任を負わない.
55 *
56 * $Id: kernel_impl.h 187 2015-06-25 03:39:04Z t_ishikawa $
57 */
58
59/*
60 * ATK2内部向け標準ヘッダファイル
61 *
62 * このヘッダファイルは,カーネルを構成するプログラムのソースファイル
63 * で必ずインクルードするべき標準ヘッダファイルである
64 *
65 * アセンブリ言語のソースファイルからこのファイルをインクルードする時
66 * は,TOPPERS_MACRO_ONLYを定義しておく
67 * これにより,マクロ定義以外を除くようになっている
68 */
69
70#ifndef TOPPERS_KERNEL_IMPL_H
71#define TOPPERS_KERNEL_IMPL_H
72
73/*
74 * カーネル内部用リネームを使用するための定義
75 */
76#ifndef TOPPERS_SVC_FUNCCALL
77#define TOPPERS_SVC_FUNCCALL
78#endif
79
80/*
81 * アプリケーションと共通のヘッダファイル
82 */
83#define OMIT_INCLUDE_OS_LCFG
84#include "Os.h"
85
86/* 無効ポインタ */
87#ifndef NULL
88#define NULL NULL_PTR
89#endif /* NULL */
90
91/*
92 * 型キャストを行うマクロの定義
93 */
94#ifndef CAST
95#define CAST(type, val) ((type) (val))
96#endif /* CAST */
97
98#ifndef TOPPERS_MACRO_ONLY
99
100/* 最適化するため,依存部再定義できる型 */
101#ifndef OMIT_DATA_TYPE
102/*
103 * カーネル内部のデータ型
104 */
105typedef uint32 InterruptNumberType; /* 割込み番号 */
106typedef uint32 AttributeType; /* オブジェクトの属性 */
107typedef sint32 PriorityType; /* 優先度 */
108#endif /* OMIT_DATA_TYPE */
109
110typedef void (*FunctionRefType)(void); /* プログラムの起動番地 */
111
112/*
113 * エラーフックOFF時,サービスID取得とパラメータ取得もOFFになる
114 */
115#ifdef CFG_USE_ERRORHOOK
116
117#ifdef CFG_USE_PARAMETERACCESS
118extern _ErrorHook_Par _errorhook_par1;
119extern _ErrorHook_Par _errorhook_par2;
120extern _ErrorHook_Par _errorhook_par3;
121#endif /* CFG_USE_PARAMETERACCESS */
122
123#endif /* CFG_USE_ERRORHOOK */
124
125/*
126 * OS内部からのShutdownOSの呼び出し
127 */
128extern void internal_shutdownos(StatusType ercd);
129
130#ifdef CFG_USE_SHUTDOWNHOOK
131extern void internal_call_shtdwnhk(StatusType ercd);
132#endif /* CFG_USE_SHUTDOWNHOOK */
133
134#endif /* TOPPERS_MACRO_ONLY */
135
136/*
137 * ASSERTマクロ
138 */
139#ifndef NDEBUG
140#define ASSERT(exp) do { \
141 if (!(exp)) { \
142 fatal_file_name = __FILE__; \
143 fatal_line_num = __LINE__; \
144 internal_shutdownos(E_OS_SYS_ASSERT_FATAL); \
145 } \
146} while (0)
147
148#else /* NDEBUG */
149#define ASSERT(exp)
150#endif /* NDEBUG */
151
152/*
153 * ターゲット依存情報の定義
154 */
155#include "target_config.h"
156
157/*
158 * すべての関数をコンパイルするための定義
159 */
160#ifdef ALLFUNC
161#include "allfunc.h"
162#endif /* ALLFUNC */
163
164/*
165 * アプリケーションモード値の定義
166 */
167#define APPMODE_NONE ((AppModeType) 0) /* モードなし */
168
169/*
170 * 実行中のコンテキスト(callevel_statの下位12ビット)の値の定義
171 * TCL_NULLの時に,本来の呼出下コンテキストが判別できなくなることに注意
172 */
173#define TCL_NULL UINT_C(0x0000) /* システムサービスを呼び出せない */
174#define TCL_TASK UINT_C(0x0001) /* タスク */
175#define TCL_ISR2 UINT_C(0x0002) /* C2ISR */
176#define TCL_PROTECT UINT_C(0x0004) /* ProtectionHook */
177#define TCL_PREPOST UINT_C(0x0008) /* PreTaskHook,PostTaskHook */
178#define TCL_SYS_STARTUP UINT_C(0x0010) /* システム定義のStartupHook */
179#define TCL_SYS_SHUTDOWN UINT_C(0x0020) /* システム定義のShutdownHook */
180#define TCL_SYS_ERROR UINT_C(0x0040) /* システム定義のErrorHook */
181#define TCL_OSAP_STARTUP UINT_C(0x0100) /* OSアプリケーションに所属のStartupHook */
182#define TCL_OSAP_SHUTDOWN UINT_C(0x0200) /* OSアプリケーションに所属のShutdownHook */
183#define TCL_OSAP_ERROR UINT_C(0x0400) /* OSアプリケーションに所属のErrorHook */
184#define TCL_STARTUP (TCL_SYS_STARTUP | TCL_OSAP_STARTUP) /* StartupHook */
185#define TCL_SHUTDOWN (TCL_SYS_SHUTDOWN | TCL_OSAP_SHUTDOWN) /* ShutdownHook */
186#define TCL_ERROR (TCL_SYS_ERROR | TCL_OSAP_ERROR) /* ErrorHook */
187#define TCL_OSAP_MASK (TCL_OSAP_STARTUP | TCL_OSAP_SHUTDOWN | TCL_OSAP_ERROR)
188/* OSアプリケーションに所属のフックマスク */
189#define TCLMASK UINT_C(0x0fff) /* コールレベルを示すビットのマスク */
190
191/*
192 * システム状態 (callevel_statの上位4ビット)の値の定義
193 */
194#define TSYS_NULL UINT_C(0x0000) /* システム状態クリア */
195#define TSYS_DISALLINT UINT_C(0x1000) /* DisableAllInterrupts発行中 */
196#define TSYS_SUSALLINT UINT_C(0x2000) /* SuspendAllInterrupts発行中 */
197#define TSYS_SUSOSINT UINT_C(0x4000) /* SuspendOSInterrupts発行中 */
198#define TSYS_ISR1 UINT_C(0x8000) /* C1ISR起動済み */
199#define TSYSMASK UINT_C(0xf000) /* システム状態を示すビットのマスク */
200
201
202#ifdef CFG_USE_STACKMONITORING
203#ifndef STACK_MAGIC_NUMBER
204/*
205 * スタックモニタリング用マジックナンバーの定義
206 * ターゲット依存部の定義は優先される
207 */
208#define STACK_MAGIC_NUMBER 0x4E434553 /* NCESのASCIIコード(0x4E434553) */
209#endif /* STACK_MAGIC_NUMBER */
210
211#ifndef TOPPERS_ISTK_MAGIC_REGION
212/* 割込みスタック用マジックナンバー領域取得マクロ */
213#define TOPPERS_ISTK_MAGIC_REGION(stk, stksz) (stk)
214#endif /* TOPPERS_ISTK_MAGIC_REGION */
215
216#ifndef TOPPERS_SSTK_MAGIC_REGION
217/* 信頼タスクスタック用マジックナンバー領域取得マクロ */
218#ifndef USE_TSKINICTXB
219#define TOPPERS_SSTK_MAGIC_REGION(p_tinib) ((StackType *) ((p_tinib)->sstk))
220#endif /* USE_TSKINICTXB */
221#endif /* TOPPERS_SSTK_MAGIC_REGION */
222
223#endif /* CFG_USE_STACKMONITORING */
224
225#define TFN_EXIT_TASK (TMAX_SVCID - TARGET_SVC_NUM)
226#define exit_task (_kernel_exit_task)
227
228/*
229 * フック種別の定義
230 */
231#define STARTUP_HOOK UINT_C(0)
232#define SHUTDOWN_HOOK UINT_C(1)
233#define ERROR_HOOK UINT_C(2)
234
235/*
236 * プロテクションフックエラーオプション
237 */
238#define PROTECTION_ERROR_OPTIONAL_BIT (PEOB_STACKMONITORING_INTERRUPT | PEOB_STACKMONITORING_DISPATCH | PEOB_STACKMONITORING_TERMTASK)
239#define PEOB_STACKMONITORING_INTERRUPT UINT_C(0x80)
240#define PEOB_STACKMONITORING_DISPATCH UINT_C(0x40)
241#define PEOB_STACKMONITORING_TERMTASK UINT_C(0x20)
242/*
243 * callevel_statのビット操作
244 */
245#define ENTER_CALLEVEL(bit) (callevel_stat |= (bit))
246#define LEAVE_CALLEVEL(bit) (callevel_stat &= (uint16) ~(bit))
247
248
249/*
250 * 各システムサービスを呼び出せる処理単位
251 */
252#define CALLEVEL_ACTIVATETASK (TCL_TASK | TCL_ISR2)
253#define CALLEVEL_TERMINATETASK (TCL_TASK)
254#define CALLEVEL_CHAINTASK (TCL_TASK)
255#define CALLEVEL_SCHEDULE (TCL_TASK)
256#define CALLEVEL_GETTASKID (TSYS_DISALLINT | TSYS_SUSALLINT | TSYS_SUSOSINT | TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST | TCL_PROTECT)
257#define CALLEVEL_GETTASKSTATE (TSYS_DISALLINT | TSYS_SUSALLINT | TSYS_SUSOSINT | TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST)
258#define CALLEVEL_GETRESOURCE (TCL_TASK | TCL_ISR2)
259#define CALLEVEL_RELEASERESOURCE (TCL_TASK | TCL_ISR2)
260#define CALLEVEL_SETEVENT (TCL_TASK | TCL_ISR2)
261#define CALLEVEL_CLEAREVENT (TCL_TASK)
262#define CALLEVEL_GETEVENT (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST)
263#define CALLEVEL_WAITEVENT (TCL_TASK)
264#define CALLEVEL_GETALARMBASE (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST)
265#define CALLEVEL_GETALARM (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST)
266#define CALLEVEL_SETRELALARM (TCL_TASK | TCL_ISR2)
267#define CALLEVEL_SETABSALARM (TCL_TASK | TCL_ISR2)
268#define CALLEVEL_CANCELALARM (TCL_TASK | TCL_ISR2)
269#define CALLEVEL_GETACTIVEAPPMODE (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST | TCL_STARTUP | TCL_SHUTDOWN)
270#define CALLEVEL_SHUTDOWNOS (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_STARTUP)
271#define CALLEVEL_GETISRID (TSYS_DISALLINT | TSYS_SUSALLINT | TSYS_SUSOSINT | TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PROTECT)
272#define CALLEVEL_INCREMENTCOUNTER (TCL_TASK | TCL_ISR2)
273#define CALLEVEL_GETCOUNTERVALUE (TCL_TASK | TCL_ISR2)
274#define CALLEVEL_GETELAPSEDVALUE (TCL_TASK | TCL_ISR2)
275#define CALLEVEL_STARTSCHEDULETABLEREL (TCL_TASK | TCL_ISR2)
276#define CALLEVEL_STARTSCHEDULETABLEABS (TCL_TASK | TCL_ISR2)
277#define CALLEVEL_STOPSCHEDULETABLE (TCL_TASK | TCL_ISR2)
278#define CALLEVEL_NEXTSCHEDULETABLE (TCL_TASK | TCL_ISR2)
279#define CALLEVEL_GETSCHEDULETABLESTATUS (TCL_TASK | TCL_ISR2)
280#define CALLEVEL_GETAPPLICATIONID (TSYS_DISALLINT | TSYS_SUSALLINT | TSYS_SUSOSINT | TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST | TCL_STARTUP | TCL_SHUTDOWN | TCL_PROTECT)
281#define CALLEVEL_CALLTRUSTEDFUNCTION (TCL_TASK | TCL_ISR2)
282#define CALLEVEL_CHECKISRMEMORYACCESS (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PROTECT)
283#define CALLEVEL_CHECKTASKMEMORYACCESS (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PROTECT)
284#define CALLEVEL_CHECKOBJECTACCESS (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PROTECT)
285#define CALLEVEL_CHECKOBJECTOWNERSHIP (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PROTECT)
286#define CALLEVEL_GETAPPLICATIONSTATE (TSYS_DISALLINT | TSYS_SUSALLINT | TSYS_SUSOSINT | TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST | TCL_STARTUP | TCL_SHUTDOWN | TCL_PROTECT)
287#define CALLEVEL_DISABLEINTERRUPTSOURCE (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST | TCL_STARTUP | TCL_SHUTDOWN | TCL_PROTECT | TSYS_DISALLINT | TSYS_SUSALLINT | TSYS_SUSOSINT)
288#define CALLEVEL_ENABLEINTERRUPTSOURCE (TCL_TASK | TCL_ISR2 | TCL_ERROR | TCL_PREPOST | TCL_STARTUP | TCL_SHUTDOWN | TCL_PROTECT | TSYS_DISALLINT | TSYS_SUSALLINT | TSYS_SUSOSINT)
289#define CALLEVEL_GETFAULTYCONTEXT (TCL_PROTECT)
290#define CALLEVEL_IOCSEND (TCL_TASK | TCL_ISR2)
291#define CALLEVEL_IOCWRITE (TCL_TASK | TCL_ISR2)
292#define CALLEVEL_IOCRECEIVE (TCL_TASK | TCL_ISR2)
293#define CALLEVEL_IOCREAD (TCL_TASK | TCL_ISR2)
294#define CALLEVEL_IOCEMPTYQUEUE (TCL_TASK | TCL_ISR2)
295#define CALLEVEL_ALLOWACCESS (TCL_TASK | TCL_ISR2)
296#define CALLEVEL_TERMINATEAPPLICATION (TCL_TASK | TCL_ISR2 | TCL_OSAP_ERROR)
297
298/*
299 * その他の定数値(標準割込みモデル)
300 */
301#define TIPM_ENAALL UINT_C(0) /* 割込み優先度マスク全解除 */
302
303/*
304 * オブジェクト属性の定義(標準割込みモデル)
305 */
306#define ENABLE UINT_C(0x01)
307#define DISABLE UINT_C(0x00)
308
309
310/*
311 * OS内部用無効なシステムサービスID
312 */
313#define OSServiceId_Invalid ((OSServiceIdType) 0xff)
314
315/*
316 * ヘッダファイルを持たないモジュールの関数・変数の宣言
317 */
318#ifndef TOPPERS_MACRO_ONLY
319
320#ifdef TOPPERS_StartOS
321/*
322 * アプリケーションモードの数
323 */
324extern const AppModeType tnum_appmode;
325
326#endif /* TOPPERS_StartOS */
327
328/*
329 * OS実行制御のための変数(osctl_manage.c)
330 */
331extern uint16 callevel_stat; /* 実行中のコンテキスト */
332extern AppModeType appmodeid; /* アプリケーションモードID */
333
334/*
335 * カーネル動作状態フラグ
336 */
337extern boolean kerflg;
338
339/*
340 * 特権モードで動作中かを示すフラグ
341 */
342extern boolean run_trusted;
343
344/*
345 * エラーフック呼び出しのための宣言(osctl.c)
346 */
347#ifdef CFG_USE_ERRORHOOK
348extern void internal_call_errorhook(StatusType ercd, OSServiceIdType svcid);
349#endif /* CFG_USE_ERRORHOOK */
350
351/*
352 * ポストタスクフック/プレタスクフック
353 * スタックモニタリング機能の初期化/プロテクションフック呼び出しのための宣言(osctl.c)
354 */
355#ifdef CFG_USE_POSTTASKHOOK
356extern void call_posttaskhook(void);
357#endif /* CFG_USE_POSTTASKHOOK */
358
359#ifdef CFG_USE_PRETASKHOOK
360extern void call_pretaskhook(void);
361#endif /* CFG_USE_PRETASKHOOK */
362
363#ifdef CFG_USE_STACKMONITORING
364extern void init_stack_magic_region(void);
365#endif /* CFG_USE_STACKMONITORING */
366
367extern void cancel_shutdown_hook(void);
368extern void callevel_chk_shutdown(StatusType ercd);
369
370extern void call_protectionhk_main(StatusType peob_ercd);
371
372/*
373 * 各モジュールの初期化(Os_Lcfg.c)
374 */
375extern void object_initialize(void);
376
377/*
378 * 各モジュールの終了処理(Os_Lcfg.c)
379 */
380extern void object_terminate(void);
381
382/*
383 * 非タスクコンテキスト用のスタック領域(Os_Lcfg.c)
384 */
385extern const MemorySizeType _ostksz; /* スタック領域のサイズ(丸めた値) */
386extern StackType * const _ostk; /* スタック領域の先頭番地 */
387#ifdef TOPPERS_OSTKPT
388extern StackType * const _ostkpt; /* スタックポインタの初期値 */
389#endif /* TOPPERS_OSTKPT */
390
391extern const MemorySizeType _nthkstksz;
392extern StackType * const _nthkstk;
393
394#endif /* TOPPERS_MACRO_ONLY */
395
396#endif /* TOPPERS_KERNEL_IMPL_H */
Note: See TracBrowser for help on using the repository browser.