source: atk2-sc3-1.4.0-ntisr/arch/v850_gcc/prc_design.txt@ 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: 22.3 KB
Line 
1
2 TOPPERS/ATK2-SC3
3 <V850依存部設計メモ>
4
5このドキュメントはV850プロセッサ依存部の設計メモを記述したものである.
6
7----------------------------------------------------------------------
8TOPPERS ATK2
9 Toyohashi Open Platform for Embedded Real-Time Systems
10 Automotive Kernel Version 2
11
12Copyright (C) 2013-2014 by Center for Embedded Computing Systems
13 Graduate School of Information Science, Nagoya Univ., JAPAN
14Copyright (C) 2013-2014 by FUJI SOFT INCORPORATED, JAPAN
15Copyright (C) 2013-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
16Copyright (C) 2013-2014 by Renesas Electronics Corporation, JAPAN
17Copyright (C) 2013-2014 by Sunny Giken Inc., JAPAN
18Copyright (C) 2013-2014 by TOSHIBA CORPORATION, JAPAN
19Copyright (C) 2013-2014 by Witz Corporation, JAPAN
20
21上記著作権者
22は,以下の (1)〜(3)の条件を満たす場合に限り,本ドキュメ
23ント(本ドキュメントを改変したものを含む.以下同じ)を使用・複製・改
24変・再é…
25å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
26(1) 本ドキュメントを利用する場合には,上記の著作権表示,この利用条件
27 および下記の無保証規定が,そのままの形でドキュメント中に含まれて
28 いること.
29(2) 本ドキュメントを改変する場合には,ドキュメントを改変した旨の記述
30 を,改変後のドキュメント中に含めること.ただし,改変後のドキュメ
31 ントが,TOPPERSプロジェクト指定の開発成果物である場合には,この限
32 りではない.
33(3) 本ドキュメントの利用により直接的または間接的に生じるいかなる損害
34 からも,上記著作権者
35およびTOPPERSプロジェクトをå…
36è²¬ã™ã‚‹ã“と.また,
37 本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づ
38 く請求からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41
42本ドキュメントは,AUTOSAR(AUTomotive Open System ARchitecture)仕様
43に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するものではな
44い.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利用する
45者
46に対して,AUTOSARパートナーになることを求めている.
47
48本ドキュメントは,無保証で提供されているものである.上記著作権者
49およ
50びTOPPERSプロジェクトは,本ドキュメントに関して,特定の使用目的に対す
51る適合性も含めて,いかなる保証も行わない.また,本ドキュメントの利用
52により直接的または間接的に生じたいかなる損害に関しても,その責任を負
53わない.
54
55$Id: prc_design.txt 187 2015-06-25 03:39:04Z t_ishikawa $
56----------------------------------------------------------------------
57
58このドキュメントは,V850E2依存部の設計メモである.作成中のものであり,
59網羅
60的ではない.GHSに関連した事項
61もこのメモに記載する.
62
63---------------------------------------------------------------------
64既知の問題
65---------------------------------------------------------------------
66・(GCC) -msoft-float
67 ・gcc 4.7(v12.02)では-msoft-floatオプションが無くなっている.
68
69・(GCC)CubeSuite+(V1.03.000)のLMA非対応
70 ・初期値付き変数のためにVMAとLMAが異なるelfファイルを作成しても,VMA
71 の場所にデータがロードされる.
72 ・実行時には毎回ダウンロード必
73要.
74
75・(GHS) GNUの Asm("" ::: "memory")相当の命令
76 ・関数単位でpragmaを使いメモリ最適化を抑制する方法はあるが,関数内
77で
78 使用することはできない.そのため,GNUの Asm("" ::: "memory")相当の
79 命令は存在しない.
80
81---------------------------------------------------------------------
82Tips
83---------------------------------------------------------------------
84FL4にて一定時間後にリセットが発生.
85 ・WDTでVAC機能がONになっている.
86 ・オプションバイトで設定(デバッガより設定)
87 OPBT0 - フラッシュ・マスク・オプションのレジスタ0
88 ・アドレス FF47000CH
89 ・OPBT0の値によっては起動時からWDTが有効となる.
90 ・オール0で停止する.
91 OPBT0の変更
92 ・デバッガでターゲットに接続
93 ・デバッグ・ツールのプロパティフラッシュ・オプションタブに表示される
94 ・「...」ボタンをクリックしてメニューを呼び出して変更.
95
96---------------------------------------------------------------------
97V850E2仕様(V850E2v3)
98---------------------------------------------------------------------
99●割込関連
100
101割込み優å…
102ˆåº¦
103 値が小さいほど優å…
104ˆåº¦ãŒé«˜ã„
105 0が最高,15が最低優å…
106ˆåº¦ï¼Ž
107
108割込み関連レジスタ
109 ・EICC : 割込み要因の取得
110 ・EIWR : 割込み発生時の作業用レジスタ
111 ・ISPR : 受付中の割込み
112 ・PMR : 割込み優å…
113ˆåº¦ãƒžã‚¹ã‚¯
114 ・ISPC : 受付中の割込みのクリア
115
116ベクタ
117 ・割込み要因毎のベクタ.
118 ・割込み毎に16bypte
119 要因 : リターン命令
120 0x00 : リセット
121 0x10 : FEレベルマスカブル割込み : feret
122 0x20 : FEレベルノンマスカブル割込み : feret
123 0x30 : システムエラー例外・周辺保護例外・タイミング監視例外 : feret
124 0x40 : EIレベルソフトウェア例外 : eiret
125 0x50 : EIレベルソフトウェア例外 : eiret
126 0x70 : 浮動小数点演算例外 : eiret
127 0x80 : EIレベルマスカブル割込み : eiret
128
129FEINT/FENMI 割込み
130 ・CPUシステム以外で定義される例外などで利用する.
131 ・例えば、AUTOSARの時間監視などの外付けタイマなどをFEINTにつないで,
132 通常のプログラムの割込み禁止許可(EIレベル)の影響を受けずに割込みを
133 受け付けるようにすることができる.
134 ・FENMIのほうはWatchDogなどを想定している.
135 ・å…
136ƒã€…
137は一般アプリとは異なる緊急度の高い割り込みとして機能させることを
138 想定している.
139
140eiret/feret 命令
141 EIレベルの例外処理からの復帰
142 eiret命令
143 FEレベルの例外処理からの復帰
144 feret命令
145 それぞれPSWのEPが0の場合に例外ルーチンの実行を終了したことを外部
146 (割込みコントローラ)に伝える.
147 PSWのEP(bit6)
148 割込み以外の例外処理中であることを示す.このビットがセットされても
149 例外要求の受け付けには影響しない.
150 0 : 割込み処理中である.
151 1 : 割込み以外の例外処理中
152 PSWのNP(bit7)
153 '0' : FEレベル例外処理中ではない.
154 '1' : 多重例外の発生及び割り込みの発生を禁止する.
155・PSWのEP=0の時にeiretをすると,ISPRが割込み前に戻るが,ISPCを使って
156 All 0にクリアすることで良ければ(割込みの一番外のみ実行すればよいなら
157 ),eirteは必
158要ない.
159・例外に関しては,feretはEP=1となっているので,呼び出しても呼び出さな
160 くても問題ない.
161・FEINT/FENMIはferetを行う必
162要がある.(ISPRとは別に優å…
163ˆåº¦ç®¡ç†ãƒ“ットが
164 あり,クリアする必
165要がある ICSR.FNEとICSR.FIE)
166・PSWのEPが'1'の状æ…
167‹ã§eiret/feretを実行すれば,単にeipc/eipswまたは
168 fepc/fepswをpc/pswに復帰するのみとなり,特に他に副作用はない.
169
170
171 ・0x10 : FEレベルマスカブル割込み feret
172 ・0x20 : FEレベルノンマスカブル割込み(再開・回復不可能) feret
173 ・0x30 : FE例外 feret
174 システムエラー例外(再開・回復不可能)
175 周辺保護例外(回復不可能)
176 タイミング監視違反
177 実行保護
178 メモリエラー(回復不可能)
179 データ保護
180 コプロセッサ例外
181 予約命令例外
182 FEレベルソフトウェア例外
183 コプロセッサ使用不可
184 予約命令
185 FEレベルソフトウェア例外
186 ->例外要因コード
187 ・0x40 : EIレベルソフトウェア例外(Trap)eiret <- 割込みとして扱う?
188 例外要因コード : 0x40 - 0x4F
189 ・0x50 : EIレベルソフトウェア例外(Trap)eiret <- 割込みとして扱う?
190 例外要因コード : 0x50 - 0x5F
191 ・0x70 : 浮動小数点(回復不可能) eiret <- 割込みとして扱う?
192 浮動小数点例外
193 例外要因コード : 0x71
194 ・0x80 : EIレベルマスカブル割込み
195
196●レジスタ
197
198・システムレジスタバンク
199 ・BSELにより選択
200 ・pswにアクセスする際には常にバンクを切り替えてアクセス.
201
202・レジスタ別名
203 r31 : lp
204 r30 : ep
205 r3 : sp
206 r4 : gp
207 r5 : tp
208
209
210●命令
211
212callt 命令
213・コンパイラオプション -mdisable-callt を付けないと使用される.
214・リンクも含めてコードå…
215¨ä½“を眺めた時に,最頻出ブロックに関数の出å…
216¥å£å‡¦
217 理でのスタック退避/復帰処理がある.このため,コードサイズ縮小のため
218 のå…
219±é€šãƒ–ロックとしてCallt命令で呼び出されるコードに変換し、出å…
220¥å£å‡¦
221 理の圧縮を図る.
222・各命令に埋め込むよりもコード効率が良い。また、関数にしてFar
223 jump(mov+jmp=64ビット)するよりも小さい(16ビット)という点が利用価値と
224 なる.
225・ただし,Callt命令はflashをアクセスするため,速度低下を招いてしまうた
226 め,速度重視の最適化ではOFFとする.
227
228sld/sst命令(epをベースポインタに使用する)
229・sld/sstは、16ビット命令でサイズ最適化時に局所的に利用される.
230
231---------------------------------------------------------------------
232依存部の設計
233---------------------------------------------------------------------
234●割込処理モデル
235
236割込み禁止
237・IMR(EICn)により実現
238
239割込み優å…
240ˆåº¦
241・PMR(ビットなので注意)により実現
242 0〜15の16段階
243 0が最高優å…
244ˆåº¦15が最低優å…
245ˆåº¦ï¼Ž
246 プロセッサの内
247部表現と外部表現の関係
248 0〜15,16
249 -16〜-1,0
250
251割込みハンドラ
252・FEレベルマスカブル割込み・ノンマスカブル割込みは扱わないが,例外
253 番号は割り付ける.
254 ・例外番号,1,2
255・EIレベルソフトウェア例外(Trap)は,例外として扱う.
256 ・2種類の例外として,例外番号:4と5
257・浮動小数点(回復不可能)は例外として扱う.
258 ・1種類の例外として扱う,例外番号7
259・FE例外を例外として扱う.例外要因コードがスパースなので,現状では
260 細かい分岐は行わず,å…
261¨ã¦ä¾‹å¤–番号3の例外として扱う.
262
263---------------------------------------------------------------------
264GHS対応
265---------------------------------------------------------------------
266●基本
267
268・コンパイラの判断フラグ
269 __ghs__
270
271・リンカスクリプト
272 ほぼGNU互換だが若干異なる
273
274・インラインアセンブラ
275 Asm("" ::: "memory"); 相当が用意されていない.
276 Asm は単にasmでよい.
277 pswの設定,di,eiは組込み関数を使う.
278 psw = __GETSR()
279 __SETSR(psw)
280 __DI();
281 __EI();
282
283・アセンブラマクロ
284 マクロの大枠の書き方は同じだが,引数を参ç…
285§ã™ã‚‹ã¨ãã«\が必
286要ない.
287
288・コマンドライン
289 ccv850
290
291・コンパイルオプション
292 現状以下のオプションで動作を確認.
293 -cpu=v850e2v3 : E2V3対応
294 -gcc : GCC互換機能
295 -preprocess_assembly_files : アセンブリファイルをプリプロセス
296 -kanji=euc : 漢字コードの指定
297 -noobj : アセンブリ言語ファイルを生成(不要なセ
298 クションを削除)
299 -g : デバッグ
300 -O2 : 最適化
301
302 MULTIを使うと以下のオプションも追加となる.
303 -Onone
304 -e
305 -no_japanese_automotive_c
306 --no_exceptions
307 --slash_comment
308 -locatedprogram
309 --no_additional_output
310 -nostrip
311 -Qn
312 -noentry
313 -O2
314 -nostartfiles
315 -srec
316 -kanji=euc
317 --asm_silent
318
319・GNUのasm(:::"memory")相当の記述
320 GHSにはGNUのasm(:::"memory")相当の記述をすることができない.そのため,
321 V850_MEMORY_CHANGED は,空の関数を呼び出すことで実現する.
322
323---------------------------------------------------------------------
324スモールデータエリア(SDA)の有効化
325---------------------------------------------------------------------
326セクション名
327 ・.sdata
328 ・.sbss
329 ・.rosdata
330 ・SMALLCOMMON
331
332---------------------------------------------------------------------
333RH850(V850E3v5)の例外処理
334---------------------------------------------------------------------
335RH850では,例外・割込み発生時にベクタから実行される.ベクタの種類は次
336の通りである.
337
338オフセット : 待
339避リソース : 名称
3400x0000 : - : リセット
3410x0010 : FE : システムエラー
3420x0020 : FE : ハイパーバイザートラップ
3430x0030 : FE : FEレベルトラップ
3440x0040 : EI : EIレベルトラップ0
3450x0050 : EI : EIレベルトラップ1
3460x0060 : EI : 予約命令例外
3470x0070 : EI : FPU例外
3480x0080 : FE : コプロセッサ使用不可例外
3490x0090 : FE : メモリ保護例外
3500x00a0 : FE : 特権命令例外
3510x00b0 : DB : デバッグ
3520x00c0 : FE : ミスアライン例外
3530x00d0 : ? : R.F.U(reserved for future use)
3540x00e0 : FE : FENMI
3550x00f0 : FE : FEINT
3560x0100 : EI : EI割込み(優å…
357ˆåº¦0)
358 ...
3590x01f0 : EI : EI割込み(優å…
360ˆåº¦15)
361
362
363ジャンプå…
364ˆã«ã¤ã„ては,次のようにする.
365
366リセット -> __start
367
368EI割込み -> interrupt
369
370待
371避リソース FE -> _fe_exception_entry
372待
373避リソース EI -> _ei_exception_entry
374
375その他
376デバッグとミスアライン例外に関しては,発生することはないので,ベクタ内
377
378で無限ループとする.
379
380
381---------------------------------------------------------------------
382V850/RH850のABI
383---------------------------------------------------------------------
384○用語
385・caller : 呼び出しå…
386ƒãŒä¿å­˜(呼び出しå…
387ˆã¯ä¿å­˜ãªã—に使える)
388・callee : 呼び出しå…
389ˆãŒä¿å­˜(使用時は保存してから)
390・fixed : 起動時の設定内
391容を保持
392
393○前提
394・V850は統一したABIがなくコンパイラ毎にABIを定義している
395・RH850ではプロセッサでABIを定義している.
396
397○バージョン
398CX : V2.01.00
399CCRH : V2.01.00
400
401
402○ABI一覧
403
404●V850:GNU
405レジスタ: 別名等 : 扱い
406R0 : ゼロ : fixed
407R1 : コンパイラ・アセンブラが使用 : caller
408R2 : OS予約 : caller (-mapp-regs:ディフォルト), fixed(-mno-app-regs)
409R3 : SP : callee
410R4 : GP : fixed
411R5 : TP : caller (-mapp-regs:ディフォルト), fixed(-mno-app-regs)
412R6-R9 : 関数の引数 : caller
413R10 : 戻り値 : caller
414R11 : 64bitの戻り値 : caller
415R12-R19 : : caller
416R20-R27 : : callee
417R28 : FP : callee
418R29 : : callee
419R30 : EP : caller (-mtda=0時), fixed(未定指定時) *
420R31 : リンクポインタ : caller
421
422SC3では,-mno-app-regsを指定.
423
424
425●V850:GHS(V5)
426レジスタ: 別名等 : 扱い
427R0 : ゼロ : fixed
428R1 : コンパイラ・アセンブラが使用 : caller
429R2 : OS予約 : caller or fixed(-reserve_r2)
430R3 : SP : callee
431R4 : GP : fixed
432R5 : TP(ROSDAベース) : caller or fixed
433R6-R9 : 関数の引数 : caller
434R10 : 戻り値 : caller
435R11 : 64bitの戻り値 : caller
436R12-R19 : : caller
437R20-R27 : : callee
438R28 : FP : callee
439R29 : : callee
440R30 : EP : caller(-notda),or fixed *1
441R31 : リンクポインタ : caller
442
443-notdaはディフォルトで有効.
444
445●V850:CX
446レジスタ: 別名等 : 扱い
447R0 : ゼロ : fixed
448R1 : コンパイラ・アセンブラが使用 : caller
449R2 : OS予約 : fixed
450R3 : SP : callee
451R4 : GP : fixed
452R5 : TP : fixed*1
453R6-R9 : 関数の引数 : caller
454R10 : 戻り値 : caller
455R11 : 64bitの戻り値 : caller
456R12-R19 : : caller
457R20-R27 : : callee
458R28 : FP : callee
459R29 : : callee
460R30 : EP : fixed*2
461R31 : リンクポインタ : caller
462
463*1 関数のアドレスを動的に(プログラム中で)取得しない場合は使用しない.
464*2 該当セクションがない場合は使用しない.
465
466●RH850(CCRH)
467レジスタ: 別名等 : 扱い
468R0 : ゼロ : fixed
469R1 : コンパイラ・アセンブラが使用 : caller
470R2 : OS予約 : caller or fixed
471R3 : SP : callee
472R4 : GP : fixed
473R5 : TP : caller or fixed*1
474R6-R9 : 関数の引数 : caller
475R10 : 戻り値 : caller
476R11 : 64bitの戻り値 : caller
477R12-R19 : : caller
478R20-R27 : : callee
479R28 : FP : callee
480R29 : : callee
481R30 : EP : callee or fixed(-Xep=fix)
482R31 : リンクポインタ : caller
483
484*1 CCRHでは現状fixedはサポートしていない
485
486--------------------------------------------------------------------------
487各コンパイラでのコードå…
488±æœ‰ã®ãŸã‚ã®ãƒ¬ã‚¸ã‚¹ã‚¿ã®æ‰±ã„
489--------------------------------------------------------------------------
490各コンパイラ,V850/RH850で扱いが異なるレジスタは次の通りである.
491
492 ・R2
493 ・R5(TP)
494 ・R30(EP)
495
496それぞれのレジスタの扱いについて次のようにする.
497
498●R2
499システム予約としてOS内
500で使用する(割込み禁止時にアセンブラ内
501で
502テンポラリレジスタとして使用する).
503そのため,ディスパッチャや割込みのエントリでは保存しない.
504理由
505SC3で必
506要なため.
507各コンパイラでfixedの扱いに可能.
508・コンパイルオプション指定
509 ・GCC : -mno-app-regs
510 ・GHS(V) : -reserve_r2
511 ・CX : 指定必
512要なし
513 ・CCRH : -Xreserve_r2
514
515
516●R5(TP)
517アセンブラ内
518では使用しない。割込みで保存する。
519理由
520CCRHでcallerであるため,割込み出å…
521¥å£ã§ä¿å­˜å¾©å¸°ã®å¿…
522要がある.
523ifdefをå…
524¥ã‚Œã‚‹ã¨å¯èª­æ€§ãŒä¸‹ãŒã‚‹ãŸã‚ä¸€å¾‹ä¿å­˜ã™ã‚‹ï¼Ž
525一方,他のコンパイラではfixedであるため,アセンブラ内
526で変更で
527きない.CCRXがfixedをサポートした際にはfixedとして扱う.
528
529 各コンパイラのABI
530 ・GCC : -mno-app-regs でR2とå…
531±ã«ã‚³ãƒ³ãƒ‘イラは使用しない
532 ・GHS(V) : fixed (ROSDAベース)
533 ・CX : fixed
534 ・CCRH : caller
535
536●R30(EP)
537 割込みの出å…
538¥å£ã§ä¿å­˜å¾©å¸°ã™ã‚‹ï¼Ž
539 ディスパッチャでも保存復帰する.
540 CX/CCRHでのfixedの使用はサポートしない.
541理由
542 GCC/GHSではcallerであるため割込みの出å…
543¥å£ã§ä¿å­˜å¾©å¸°ã™ã‚‹å¿…
544要がある.
545 ifdefをå…
546¥ã‚Œã‚‹ã¨å¯èª­æ€§ãŒä¸‹ãŒã‚‹ãŸã‚ä¸€å¾‹ä¿å­˜ã™ã‚‹ï¼Ž
547 CCRHではcaleeであるためディスパッチャで保存復帰する必
548要がある.
549 epはアセンブラの命令長を短くできるため,アセンブラ内
550で使用しているた
551 めCCRHでも割込みの出å…
552¥å£ã§ä¿å­˜ã™ã‚‹ï¼Ž
553 ・GCC : -mtda=0でコンパイラが使用する?
554 ・GHS(V) : -notdaでcaller として扱う
555 ・CX : fixed
556 ・CCRH : fixed or calee
557
558
559---------------------------------------------------------------------
560割込み/ディスパッチャでのレジスタの保存・復帰
561---------------------------------------------------------------------
562○割込み
563
564・該当箇所
565_interrupt と _fe_exception_entry と _ei_exception_entry によるレジスタの保存.
566 ret_exc_2 と ei_ret_exc_2 と ret_int_1 でのレジスタの復帰について
567
568・保存・復帰レジスタ
569callerレジスタは保存する.
570
571 r1, r6-r19, r31
572
573上記の検討よりr30(ep)も保存する.
574
575CCRHの場合はr5(tp)も保存する必
576要があるが,ifdefをå…
577¥ã‚Œã‚‹ã¨å¯èª­æ€§ãŒä¸‹ãŒ
578るため一律保存する.
579
580以上より,保存するレジスタは次の通りである.
581
582r1, r5(tp),r6-r19, r30(ep), r31
583
584
585○ディスパッチャ
586
587・保存・復帰レジスタ
588calleeレジスタは保存する.
589
590r20-r27,r28,r29
591
592r31(lp)はリターンのために保存する
593
594CCRHではr30(ep)も保存する。ifdefをå…
595¥ã‚Œã‚‹ã¨å¯èª­æ€§ãŒä¸‹ãŒ
596るため一律保存する.
597
598以上より,保存するレジスタは次の通りである.
599
600r20-r27,r28,r29,r30(ep),r31(lp)
601
602
603---------------------------------------------------------------------
604G3K/G3Mにおける一部レジスタ更新時の割込み禁止
605---------------------------------------------------------------------
606
607以下のレジスタはdi状æ…
608‹(PSW.ID=1)で設定する必
609要がある.
610
611PSW.EBV, EBASE, INTBP, ISPR, PMR, ICSR, INTCFG
612
613以上.
Note: See TracBrowser for help on using the repository browser.