source: atk2-sc3-1.4.0-ntisr/kernel/kernel_impl.h@ 172

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

ATK2-SC3 1.4.0 RH850依存部 非信頼C2ISR対応を追加

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