source: atk2-sc3-1.4.0-ntisr/arch/v850_gcc/prc_config.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対応を追加

File size: 21.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) 2012-2013 by Center for Embedded Computing Systems
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2012-2013 by FUJISOFT INCORPORATED, JAPAN
9 * Copyright (C) 2012-2013 by FUJITSU VLSI LIMITED, JAPAN
10 * Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11 * Copyright (C) 2012-2013 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 * Copyright (C) 2012-2013 by Renesas Electronics Corporation, JAPAN
13 * Copyright (C) 2012-2013 by Sunny Giken Inc., JAPAN
14 * Copyright (C) 2012-2013 by TOSHIBA CORPORATION, JAPAN
15 * Copyright (C) 2012-2013 by Witz Corporation, JAPAN
16 * Copyright (C) 2013 by Embedded and Real-Time Systems Laboratory
17 * Graduate School of Information Science, Nagoya Univ., JAPAN
18 *
19 * 上記著作権者
20は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
21 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
22 * 変・再é…
23å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
24 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
25 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
26 * スコード中に含まれていること.
27 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
28 * 用できる形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
31 * 者
32マニュアルなど)に,上記の著作権表示,この利用条件および下記
33 * の無保証規定を掲載すること.
34 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
35 * 用できない形で再é…
36å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
37 * と.
38 * (a) 再é…
39å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
40マニュアルなど)に,上記の著
41 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
42 * (b) 再é…
43å¸ƒã®å½¢æ…
44‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
45 * 報告すること.
46 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
47 * 害からも,上記著作権者
48およびTOPPERSプロジェクトをå…
49è²¬ã™ã‚‹ã“と.
50 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
51 * 由に基づく請求からも,上記著作権者
52およびTOPPERSプロジェクトを
53 * å…
54è²¬ã™ã‚‹ã“と.
55 *
56 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
57 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
58 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
59 * 用する者
60に対して,AUTOSARパートナーになることを求めている.
61 *
62 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
63お
64 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
65 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
66 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
67 * の責任を負わない.
68 *
69 * $Id: prc_config.h 189 2015-06-26 01:54:57Z t_ishikawa $
70 */
71
72/*
73 * プロセッサ依存モジュール(V850用)
74 *
75 * このインクルードファイルは,target_config.h(または,そこからインク
76 * ルードされるファイル)のみからインクルードされる.他のファイルから
77 * 直接インクルードしてはならない
78 */
79
80#ifndef TOPPERS_PRC_CONFIG_H
81#define TOPPERS_PRC_CONFIG_H
82
83#include "prc_sil.h"
84
85/*
86 * エラーチェック方法の指定
87 */
88/* =begin modified for SC3 */
89#ifndef CHECK_SSTKSZ_ALIGN
90#define CHECK_SSTKSZ_ALIGN UINT_C(4) /* システムスタックサイズのアライン単位 */
91#endif /* CHECK_STKSZ_ALIGN */
92
93#ifndef CHECK_USTKSZ_ALIGN
94#define CHECK_USTKSZ_ALIGN UINT_C(16) /* ユーザスタックサイズのアライン単位 */
95#endif /* CHECK_USTKSZ_ALIGN */
96/* =end modified for SC3 */
97
98#ifndef CHECK_FUNC_ALIGN
99#define CHECK_FUNC_ALIGN UINT_C(2) /* 関数のアライン単位 */
100#endif /* CHECK_FUNC_ALIGN */
101
102#define CHECK_FUNC_NONNULL /* 関数の非NULLチェック */
103
104#ifndef CHECK_STACK_ALIGN
105#define CHECK_STACK_ALIGN UINT_C(4) /* スタック領域のアライン単位 */
106#endif /* CHECK_STACK_ALIGN */
107
108#define CHECK_STACK_NONNULL /* スタック領域の非NULLチェック */
109
110/* =begin modified for SC3 */
111/*
112 * ターゲットで追加するシステムサービステーブル定義
113 */
114#ifndef OTHER_PRC_SVC_TABLE
115#ifdef USE_KERNEL_LIBRARY_SYSLOG
116/* シスログ機能有効時 */
117#define PRC_SVC_TABLE (void *) &_kernel_KernelLibrarySyslog
118#define PRC_SVC_NUM 1
119#else /* USE_KERNEL_LIBRARY_SYSLOG */
120/* シスログ機能無効時 */
121#define PRC_SVC_TABLE
122#define PRC_SVC_NUM 0
123#endif /* USE_KERNEL_LIBRARY_SYSLOG */
124#else /* OTHER_PRC_SVC_TABLE */
125#define STR(a) STR_(a)
126#define STR_(a) # a
127#include STR(OTHER_PRC_SVC_TABLE)
128#endif /* OTHER_PRC_SVC_TABLE */
129
130/*
131 * svcで呼び出す処理の種類
132 * システムサービスのå…
133¥ã‚Šå£
134 * 非信頼フックの出口
135 */
136#define SYSCALL_SIZE 2
137/* =end modified for SC3 */
138
139#define call_errorhook(ercd, svcid) stack_change_and_call_func_2(&internal_call_errorhook, (ercd), (svcid))
140#define call_shutdownhook(ercd) stack_change_and_call_func_1(&internal_call_shtdwnhk, ((uint32) (ercd)))
141
142/*
143 * 割込み番号の範囲の判定
144 */
145#if TMIN_INTNO == 0
146#define VALID_INTNO(intno) ((intno) <= (InterruptNumberType) (TMAX_INTNO))
147#else /* TMIN_INTNO != 0 */
148#define VALID_INTNO(intno) (((InterruptNumberType) (TMIN_INTNO) <= (intno)) && ((intno) <= (InterruptNumberType) (TMAX_INTNO)))
149#endif /* TMIN_INTNO == 0 */
150
151#ifndef TOPPERS_MACRO_ONLY
152
153/*
154 * 非タスクコンテキスト用のスタック開始アドレス設定マクロ
155 */
156#define TOPPERS_OSTKPT(stk, stksz) ((StackType *) ((sint8 *) (stk) + (stksz)))
157
158/*
159 * プロセッサの特殊命令のインライン関数定義
160 */
161#include <prc_insn.h>
162
163/*
164 * TOPPERS標準割込み処理モデルの実現
165 */
166
167/*
168 * 例外(割込み/CPU例外)のネスト回数のカウント
169 *
170 * コンテキスト参ç…
171§ã®ãŸã‚ã«ä½¿ç”¨
172 */
173extern uint32 except_nest_cnt;
174
175/*
176 * カーネル管理内
177(カテゴリ2)の割込みを禁止するためのPMRの設定値
178 */
179extern const uint16 pmr_isr2_mask;
180
181/*
182 * カーネル管理外(カテゴリ1)の割込みとなる優å…
183ˆåº¦ã®PMRのビット
184 */
185extern const uint16 pmr_isr1_mask;
186
187/*
188 * 現在の割込み優å…
189ˆåº¦ã®å€¤ï¼ˆå†…
190部表現)
191 */
192extern uint8 current_iintpri;
193
194/*
195 * 割り込み要求マスクテーブル(PMRへの設定値)
196 */
197extern const uint16 pmr_setting_tbl[];
198
199/*
200 * 無限ループ処理
201 */
202extern void infinite_loop(void) NoReturn;
203
204/*
205 * 割込み優å…
206ˆåº¦ã®å†…
207部表現と外部表現の変更
208 */
209#ifndef TOPPERS_MACRO_ONLY
210#define EXT_IPM(iipm) ((PriorityType) (iipm - (TNUM_INTPRI))) /* 内
211部表現を外部表現に */
212#define INT_IPM(ipm) ((uint32) (ipm + (TNUM_INTPRI))) /* 外部表現を内
213部表現に */
214#else /* TOPPERS_MACRO_ONLY */
215#define EXT_IPM(iipm) (iipm - (TNUM_INTPRI)) /* 内
216部表現を外部表現に */
217#define INT_IPM(ipm) (ipm + (TNUM_INTPRI)) /* 外部表現を内
218部表現に */
219#endif /* TOPPERS_MACRO_ONLY */
220
221/*
222 * å…
223¨å‰²è¾¼ã¿ç¦æ­¢çŠ¶æ…
224‹ã¸ã®ç§»è¡Œ
225 */
226LOCAL_INLINE void
227x_lock_all_int(void)
228{
229 disable_int();
230}
231
232/*
233 * å…
234¨å‰²è¾¼ã¿ç¦æ­¢çŠ¶æ…
235‹ã®è§£é™¤
236 */
237LOCAL_INLINE void
238x_unlock_all_int(void)
239{
240 enable_int();
241}
242
243/*
244 * x_nested_lock_os_int()のネスト回数
245 * アクセスの順序が変化しないよう,volatile を指定
246 */
247extern volatile uint8 nested_lock_os_int_cnt;
248
249/*
250 * OS割込み禁止
251 * API実行時に呼び出される
252 * 割込み優å…
253ˆåº¦ãƒžã‚¹ã‚¯ãŒISR2の優å…
254ˆåº¦ãƒžã‚¹ã‚¯ã®ç¯„囲より高い状æ…
255‹ã§å‘¼ã³å‡ºã•ã‚Œã‚‹
256 * ことはない(ISR1から呼び出されることはない)
257 */
258LOCAL_INLINE void
259x_nested_lock_os_int(void)
260{
261 /*
262 * 一段目なら割込みの禁止レベルに設定割込み優å…
263ˆåº¦ãƒžã‚¹ã‚¯ã®å€¤ã‚’保存
264 */
265 if (nested_lock_os_int_cnt == 0U) {
266 set_pmr(pmr_isr2_mask); /* OS割り込み禁止に設定 */
267 }
268 nested_lock_os_int_cnt++;
269
270 V850_MEMORY_CHANGED
271}
272
273/*
274 * OS割込み解除
275 * API実行時に呼び出される
276 * 割込み優å…
277ˆåº¦ãƒžã‚¹ã‚¯ãŒISR2の優å…
278ˆåº¦ãƒžã‚¹ã‚¯ã®ç¯„囲より高い状æ…
279‹ã§å‘¼ã³å‡ºã•ã‚Œã‚‹
280 * ことはない(ISR1から呼び出されることはない)
281 */
282LOCAL_INLINE void
283x_nested_unlock_os_int(void)
284{
285 V850_MEMORY_CHANGED
286 ASSERT(nested_lock_os_int_cnt > 0U);
287 nested_lock_os_int_cnt--;
288
289 /*
290 * 一番外側なら割込み優å…
291ˆåº¦ãƒžã‚¹ã‚¯ã‚’æ›´æ–°
292 */
293 if (nested_lock_os_int_cnt == 0U) {
294 set_pmr(pmr_setting_tbl[current_iintpri]);
295 }
296}
297
298/*
299 * SuspendOSInterrupts()から呼び出すOS割込み禁止状æ…
300‹ã¸ã®ç§»è¡Œ
301 * x_nested_lock_os_int()との違いは,ISR1から呼び出される可能性があるため,
302 * 現在のISPRがOS割込み禁止時の値より小さい場合はISR1から呼び出されたとして,
303 * 何もせずリターンする
304 */
305LOCAL_INLINE void
306x_suspend_lock_os_int(void)
307{
308 uint16 ispr;
309
310 ispr = get_ispr();
311
312 if ((ispr & pmr_isr1_mask) == 0U) {
313 /*
314 * カテゴリ1 ISRから呼ばれた場合は何もしない
315 */
316 if (nested_lock_os_int_cnt == 0U) {
317 set_pmr(pmr_isr2_mask); /* OS割り込み禁止に設定 */
318 }
319 nested_lock_os_int_cnt++;
320 V850_MEMORY_CHANGED
321 }
322}
323
324/*
325 * ResumeOSInterrupts()から呼び出すOS割込み禁止状æ…
326‹ã®è§£é™¤
327 * x_nested_lock_os_int()との違いは,ISR1から呼び出される可能性があるため,
328 * 現在のISPRがOS割込み禁止時の値より小さい場合はISR1から呼び出されたとして,
329 * 何もせずリターンする
330 */
331LOCAL_INLINE void
332x_resume_unlock_os_int(void)
333{
334 uint16 ispr;
335
336 V850_MEMORY_CHANGED
337 ispr = get_ispr();
338
339 if ((ispr & pmr_isr1_mask) == 0U) {
340 /*
341 * カテゴリ1 ISRから呼ばれた場合は何もしない
342 */
343 ASSERT(nested_lock_os_int_cnt > 0U);
344 nested_lock_os_int_cnt--;
345
346 /*
347 * 一番外側なら割込み優å…
348ˆåº¦ãƒžã‚¹ã‚¯ã‚’æ›´æ–°
349 */
350 if (nested_lock_os_int_cnt == 0U) {
351 set_pmr(pmr_setting_tbl[current_iintpri]);
352 }
353 }
354}
355
356
357/*
358 * (モデル上の)割込み優å…
359ˆåº¦ãƒžã‚¹ã‚¯ã®è¨­å®š
360 *
361 * 本OSでは次の二点が成り立つ
362 * * OS割込み禁止状æ…
363‹ã§å‘¼ã³å‡ºã•ã‚Œã‚‹
364 * * OS割込み禁止時の優å…
365ˆåº¦ã‚ˆã‚Šé«˜ã„値は指定されない
366 * OS割込み禁止はPMRで実現されており,ここでPMRを変更すると,OS割込み禁止
367 * が解除される場合があるため,内
368部変数(current_iintpri) の変更のみを行う.
369 * 優å…
370ˆåº¦ãƒžã‚¹ã‚¯ã®å¤‰æ›´ã¯ï¼ŒAPIの出口で呼び出される,x_nested_unlock_os_int()
371 * で実施される.
372 */
373LOCAL_INLINE void
374x_set_ipm(PriorityType intpri)
375{
376 ASSERT(nested_lock_os_int_cnt > 0U);
377
378 current_iintpri = INT_IPM(intpri);
379}
380
381/*
382 * (モデル上の)割込み優å…
383ˆåº¦ãƒžã‚¹ã‚¯ã®å‚ç…
384§
385 *
386 * 本OSでは次の点が成り立つ
387 * * OS割込み禁止状æ…
388‹ã§å‘¼ã³å‡ºã•ã‚Œã‚‹
389 */
390LOCAL_INLINE PriorityType
391x_get_ipm(void)
392{
393 ASSERT(nested_lock_os_int_cnt > 0U);
394 return(EXT_IPM(current_iintpri));
395}
396
397/*
398 * 割込み要求禁止フラグのセット
399 *
400 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
401 * フラグをクリアしようとした場合には,falseを返す.
402 */
403LOCAL_INLINE boolean
404x_disable_int(InterruptNumberType intno)
405{
406 uint32 eic_address = EIC_ADDRESS(intno);
407
408 if (!VALID_INTNO(intno)) {
409 return(FALSE);
410 }
411
412 /* 割込みの禁止(7bit目をセット) */
413 sil_wrh_mem((void *) eic_address,
414 sil_reh_mem((void *) eic_address) | (0x01U << 7));
415
416 return(TRUE);
417}
418/*
419 * 割込み要求禁止フラグの解除
420 *
421 * 割込み属性が設定されていない割込み要求ラインに対して割込み要求禁止
422 * フラグをクリアしようとした場合には,falseを返す.
423 */
424
425LOCAL_INLINE boolean
426x_enable_int(InterruptNumberType intno)
427{
428 uint32 eic_address = EIC_ADDRESS(intno);
429
430 if (!VALID_INTNO(intno)) {
431 return(FALSE);
432 }
433
434 /* 7bit目をクリア */
435 sil_wrh_mem((void *) eic_address,
436 sil_reh_mem((void *) eic_address) & ~(0x01U << 7));
437
438 return(TRUE);
439}
440
441/*
442 * 割込み要求のクリア
443 */
444LOCAL_INLINE boolean
445x_clear_int(InterruptNumberType intno)
446{
447 uint32 eic_address = EIC_ADDRESS(intno);
448
449 if (!VALID_INTNO(intno)) {
450 return(FALSE);
451 }
452
453 /* 割込みのクリア(12bit目をクリア) */
454 sil_wrh_mem((void *) eic_address,
455 sil_reh_mem((void *) eic_address) & ~(0x01U << 12));
456
457 return(TRUE);
458}
459
460/*
461 * 割込み要求のチェック
462 */
463LOCAL_INLINE boolean
464x_probe_int(InterruptNumberType intno)
465{
466 uint32 eic_address = EIC_ADDRESS(intno);
467 uint16 tmp;
468
469 if (!VALID_INTNO(intno)) {
470 return(FALSE);
471 }
472
473 tmp = sil_reh_mem((void *) (eic_address));
474 return((tmp & 0x1000) != 0);
475}
476
477/*
478 * 割込み要求ラインの属性の設定
479 */
480extern void x_config_int(InterruptNumberType intno, AttributeType intatr, PriorityType intpri);
481
482/*
483 * 割込みハンドラのå…
484¥ã‚Šå£ã§å¿…
485要なIRC操作
486 */
487LOCAL_INLINE void
488i_begin_int(InterruptNumberType intno)
489{
490
491}
492
493/*
494 * 割込みハンドラの出口で必
495要なIRC操作
496 */
497LOCAL_INLINE void
498i_end_int(InterruptNumberType intno)
499{
500
501}
502
503/*
504 * 未定義の割込みがå…
505¥ã£ãŸå ´åˆã®å‡¦ç†
506 */
507extern void default_int_handler(void);
508extern void _start(void);
509extern void prc_hardware_initialize(void);
510
511/*
512 * プロセッサ依存の初期化
513 */
514extern void prc_initialize(void);
515
516/*
517 * プロセッサ依存の終了時処理
518 */
519extern void prc_terminate(void);
520
521/*
522 * タスクディスパッチャ
523 */
524
525/*
526 * 最高優å…
527ˆé †ä½ã‚¿ã‚¹ã‚¯ã¸ã®ãƒ‡ã‚£ã‚¹ãƒ‘ッチ(prc_support.S)
528 *
529 * dispatch は,タスクコンテキストから呼び出されたサービスコール処理
530 * 内
531で,OS割込み禁止状æ…
532‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない
533 */
534extern void dispatch(void);
535
536/*
537 * ディスパッチャの動作開始(prc_support.S)
538 *
539 * start_dispatchは,カーネル起動時に呼び出すべきもので,すべての割込
540 * みを禁止した状æ…
541‹ï¼ˆå…
542¨å‰²è¾¼ã¿ç¦æ­¢çŠ¶æ…
543‹ã¨åŒç­‰ã®çŠ¶æ…
544‹ï¼‰ã§å‘¼ã³å‡ºã•ãªã‘れば
545 * ならない
546 */
547extern void start_dispatch(void) NoReturn;
548
549/*
550 * 現在のコンテキストを捨ててディスパッチ(prc_support.S)
551 *
552 * exit_and_dispatch は,OS割込み禁止状æ…
553‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない
554 */
555extern void exit_and_dispatch(void) NoReturn;
556
557/* =begin added for SC3 */
558/*
559 * 現在のコンテキストを捨ててディスパッチ(prc_support.S)
560 * PosttaskHook を呼ばないエントリ
561 *
562 * exit_and_dispatch_nohook は,OS割込み禁止状æ…
563‹ã§å‘¼ã³å‡ºã•ãªã‘ればならない
564 */
565extern void exit_and_dispatch_nohook(void) NoReturn;
566/* =end added for SC3 */
567
568/*
569 * タスクコンテキストブロックの定義
570 */
571typedef struct task_context_block {
572 /* =begin modified for SC3 */
573 void *ssp; /* システムスタックポインタ */
574 void *usp; /* ユーザスタックポインタ */
575 boolean priv_mode; /* 特権モード実行中か */
576 /* =end modified for SC3 */
577 FunctionRefType pc; /* プログラムカウンタ */
578} TSKCTXB;
579
580/* =begin modified for SC3 */
581/*
582 * タスク初期化コンテキストブロック
583 */
584#define USE_TSKINICTXB /* TSKINICTXBを使用する */
585
586typedef struct task_initialization_context_block {
587 MemorySizeType sstksz; /* スタック領域のサイズ(丸めた値) */
588 void *sstk_bottom; /* スタックポインタの初期値(スタックの底の初期値) */
589 MemorySizeType stksz; /* スタック領域のサイズ(丸めた値) */
590 void *stk_bottom; /* スタックポインタの初期値(スタックの底の初期値) */
591} TSKINICTXB;
592
593/*
594 * スタックのMPU情
595å ±
596 */
597typedef struct task_stack_mpu_info_block {
598 uint8 *start_ustk_label;
599 uint8 *limit_ustk_label;
600} STKMPUINFOB;
601
602/*
603 * OSアプリケーションのMPU情
604å ±
605 */
606typedef struct {
607 uint32 mpul;
608 uint32 mpua;
609 uint32 mpat;
610} MPUINFOB;
611
612typedef struct {
613#ifdef __v850e2v3__
614 uint8 *start_text_label;
615 uint8 *limit_text_label;
616 uint8 *start_rosdata_label;
617 uint8 *limit_rosdata_label;
618 uint8 *start_ram_label;
619 uint8 *limit_ram_label;
620 uint8 *start_sram_label;
621 uint8 *limit_sram_label;
622#else /* __v850e2v3__ */
623#ifdef USE_MPU_SRPW_DATA
624 uint8 *start_srpw_label;
625 uint8 *limit_srpw_label;
626#endif /* USE_MPU_SRPW_DATA */
627#ifdef USE_MPU_SRPW_SDATA
628 uint8 *start_ssrpw_label;
629 uint8 *limit_ssrpw_label;
630#endif /* USE_MPU_SRPW_SDATA */
631#ifdef USE_MPU_PR_TEXT
632 uint8 *start_text_label;
633 uint8 *limit_text_label;
634#endif /* USE_MPU_PR_TEXT */
635#ifdef USE_MPU_PR_SDATA
636 uint8 *start_rosdata_label;
637 uint8 *limit_rosdata_label;
638#endif /* USE_MPU_PR_SDATA */
639#ifdef USE_MPU_PRW_DATA
640 uint8 *start_ram_label;
641 uint8 *limit_ram_label;
642#endif /* USE_MPU_PRW_DATA */
643#ifdef USE_MPU_PRW_SDATA
644 uint8 *start_sram_label;
645 uint8 *limit_sram_label;
646#endif /* USE_MPU_PRW_SDATA */
647 MPUINFOB *mpu_area_info;
648 uint8 tnum_mpu_area;
649 uint32 mprc;
650#endif /* __v850e2v3__ */
651} OSAPMPUINFOB;
652/* =end modified for SC3 */
653
654/*
655 * タスクコンテキストの初期化
656 *
657 * タスクが休止状æ…
658‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
659‹ã«ç§»è¡Œã™ã‚‹æ™‚に呼ばれる.この時点
660 * でスタック領域を使ってはならない
661 *
662 * activate_contextを,インライン関数ではなくマクロ定義としているのは,
663 * この時点ではTCBが定義されていないためである
664 */
665/* =begin modified for SC3 */
666extern void start_stask_r(void);
667extern void start_utask_r(void);
668
669#define activate_context(p_tcb) \
670{\
671 (p_tcb)->tskctxb.ssp = (p_tcb)->p_tinib->tskinictxb.sstk_bottom; \
672 (p_tcb)->tskctxb.pc = ((p_tcb)->p_tinib->p_osapcb->p_osapinib->osap_trusted != FALSE) ? (FunctionRefType)start_stask_r: (FunctionRefType)start_utask_r; \
673 (p_tcb)->tskctxb.priv_mode = 0U; \
674}
675
676/*
677 * force_term_osap_mainの起動
678 * リスタートタスクのpcにforce_term_osap_mainのアドレスを格納する
679 */
680#ifdef CFG_USE_STACKMONITORING
681#define activate_force_term_osap_main(p_tcb) \
682{\
683 (p_tcb)->tskctxb.ssp = (p_tcb)->p_tinib->tskinictxb.sstk_bottom; \
684 *(uint32 *)((uint32)((p_tcb)->tskctxb.ssp) - ((p_tcb)->p_tinib->tskinictxb.sstksz)) = STACK_MAGIC_NUMBER; \
685 (p_tcb)->tskctxb.pc = &(force_term_osap_main); \
686}
687#else /*CFG_USE_STACKMONITORING*/
688#define activate_force_term_osap_main(p_tcb) \
689{\
690 (p_tcb)->tskctxb.ssp = (p_tcb)->p_tinib->tskinictxb.sstk_bottom; \
691 (p_tcb)->tskctxb.pc = &(force_term_osap_main); \
692}
693#endif /*CFG_USE_STACKMONITORING*/
694
695#define TOPPERS_SSTK_MAGIC_REGION(p_tinib) ((StackType *) ((uint32)(p_tinib)->tskinictxb.sstk_bottom - (uint32)(p_tinib)->tskinictxb.sstksz))
696/* =end modified for SC3 */
697
698/* 引数の型はハードウェアが扱えるサイズ(uint32)と同サイズを使用 */
699extern void stack_change_and_call_func_1(void (*func)(StatusType ercd), uint32 arg1);
700extern void stack_change_and_call_func_2(void (*func)(StatusType ercd, OSServiceIdType svcid), uint8 arg1, uint8 arg2);
701
702/*
703 * 850ではå…
704¨ã¦ã®å‰²è¾¼ã¿è¦æ±‚ラインに対して
705 * 有効/無効を制御可能であるため,常にtrueを返す
706 */
707#define target_is_int_controllable(intno) TRUE
708
709#ifdef ENABLE_RETURN_MAIN
710/*
711 * AKTSP用のmain()へのリターンコード(prc_support.S)
712 */
713extern void return_main(void);
714#endif /* ENABLE_RETURN_MAIN */
715
716/* =begin modified for SC3 */
717#define call_protectionhk_main_stkchg(ercd) stack_change_and_call_func_1(&call_protectionhk_main, ((uint32) (ercd)))
718
719extern StatusType trustedfunc_stack_check(MemorySizeType size);
720extern StatusType no_support_service(void);
721
722/*
723 * OS割込み禁止時のstatus.ILへの設定値
724 */
725extern const uint32 tmin_status_il;
726
727/*
728 * x_nested_lock_os_int()のネスト回数
729 * アクセスの順序が変化しないよう,volatile を指定
730 */
731extern volatile uint8 nested_lock_os_int_cnt;
732
733LOCAL_INLINE void
734x_clear_nested_os_int(void)
735{
736 ASSERT(nested_lock_os_int_cnt > 0U);
737 nested_lock_os_int_cnt = 1U;
738}
739
740#define check_address_sstack(base, size, p_tinib) (check_address_stack(base, size, (const MemoryStartAddressType)((uint32)(p_tinib)->tskinictxb.sstk_bottom - (uint32)(p_tinib)->tskinictxb.sstksz), (p_tinib)->tskinictxb.sstksz))
741#define check_address_ustack(base, size, p_tinib) (check_address_stack(base, size, (const MemoryStartAddressType)((uint32)(p_tinib)->tskinictxb.stk_bottom - (uint32)(p_tinib)->tskinictxb.stksz), (p_tinib)->tskinictxb.stksz))
742
743/* =end modified for SC3 */
744
745#endif /* TOPPERS_MACRO_ONLY */
746
747/* =begin modified for SC3 */
748/*
749 * syscallのパラメータ
750 */
751#define NO_SVC 1 /* サービスコール呼び出し時のsvcの引数 */
752
753#ifdef USE_KERNEL_LIBRARY_SYSLOG
754#include "prc_syslog.h"
755#endif /* USE_KERNEL_LIBRARY_SYSLOG */
756/* =end modified for SC3 */
757
758#define NTC2ISR
759
760#endif /* TOPPERS_PRC_CONFIG_H */
Note: See TracBrowser for help on using the repository browser.