source: atk2-sc3_fl850f1l/arch/v850_ccrh/prc_design.txt@ 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: 9.5 KB
Line 
1
2 TOPPERS/ATK2-SC3
3 <RH850プロセッサ依存部設計方針(CCRH版)>
4
5----------------------------------------------------------------------
6TOPPERS ATK2
7 Toyohashi Open Platform for Embedded Real-Time Systems
8 Automotive Kernel Version 2
9
10Copyright (C) 2014-2015 by Center for Embedded Computing Systems
11 Graduate School of Information Science, Nagoya Univ., JAPAN
12
13上記著作権者
14は,以下の (1)〜(3)の条件を満たす場合に限り,本ドキュメ
15ント(本ドキュメントを改変したものを含む.以下同じ)を使用・複製・改
16変・再é…
17å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
18(1) 本ドキュメントを利用する場合には,上記の著作権表示,この利用条件
19 および下記の無保証規定が,そのままの形でドキュメント中に含まれて
20 いること.
21(2) 本ドキュメントを改変する場合には,ドキュメントを改変した旨の記述
22 を,改変後のドキュメント中に含めること.ただし,改変後のドキュメ
23 ントが,TOPPERSプロジェクト指定の開発成果物である場合には,この限
24 りではない.
25(3) 本ドキュメントの利用により直接的または間接的に生じるいかなる損害
26 からも,上記著作権者
27およびTOPPERSプロジェクトをå…
28è²¬ã™ã‚‹ã“と.また,
29 本ドキュメントのユーザまたはエンドユーザからのいかなる理由に基づ
30 く請求からも,上記著作権者
31およびTOPPERSプロジェクトをå…
32è²¬ã™ã‚‹ã“と.
33
34本ドキュメントは,AUTOSAR(AUTomotive Open System ARchitecture)仕様
35に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するものではな
36い.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利用する
37者
38に対して,AUTOSARパートナーになることを求めている.
39
40本ドキュメントは,無保証で提供されているものである.上記著作権者
41およ
42びTOPPERSプロジェクトは,本ドキュメントに関して,特定の使用目的に対す
43る適合性も含めて,いかなる保証も行わない.また,本ドキュメントの利用
44により直接的または間接的に生じたいかなる損害に関しても,その責任を負
45わない.
46
47$Id: prc_design.txt 164 2015-06-03 01:22:29Z t_ishikawa $
48----------------------------------------------------------------------
49
50○概要
51
52本ドキュメントでは,GCCからCCRHに向けて変更した設計事項
53をざっくりと
54記録する.
55
56◯ ターゲット定義のセクション
57
58カーネルのターゲット依存部が定義するセクション名の対応は下記のとおり
59であり,prc_mem.yaml|arxmlによって定義する
60
61凡例:gcc依存部でのセクション名 → ccrh依存部でのセクション名
62 .text_kernel → kernel.text
63 .rodata_kernel → kernel.const
64 .data_kernel → kernel.data
65 .bss_kernel → kernel.bss
66 .srpw_kernel → kernel.srpw.bss
67 .text_shared → shared.text
68 .rodata_shared → shared.const
69 .data_shared → shared.data
70 .bss_shared → shared.bss
71
72また,上記セクションがé…
73ç½®ã•ã‚Œã‚‹OSAPは下記のとおり
74凡例:OSAP名 - 所属するセクション名
75 prc_osap_kernel (ä¿¡é ¼OSAP)
76 - kernel.text
77 - kernel.const
78 - kernel.data
79 - kernel.bss
80 - kernel.srpw.bss
81 (無所属)
82 - shared.text
83 - shared.const
84 - shared.data
85 - shared.bss
86
87また,ジェネレータが自動的に定義するセクション名,å…
88·ä½“的にはユーザ
89スタックのセクション名は下記のとおり.
90凡例:gcc依存部でのセクション名 → ccrh依存部でのセクション名
91 .user_stack.<task ID> → .user_stack.<task ID>.bss
92 .shared_user_stack.<priority> → .shared_user_stack.<priority>.bss
93
94◯ prc_support.asm
95
96まず,v850_gcc/prc_support.S から ccrh/gcc2ccrh.rb によりアセンブリを
97生成する.
98
99そして,上記セクション名の変換規則に従い,セクションé…
100ç½®æŒ‡å®šã‚’変更する.
101
102また,ccrhでは,C言語のマクロをアセンブリに取り込めないため,v850asm.inc
103にマクロ定義を記述する.
104
105※prc_asm.tf で出力する案も考えられる
106
107◯ DEFINE_VAR_SEC_NOBITS(type, var, sec)
108
109非依存部で定義した変数を,特定のセクションにé…
110ç½®ã™ã‚‹ãŸã‚ã®ãƒžã‚¯ãƒ­ã§ã‚る.
111現状では,å…
112±æœ‰ãƒªãƒ¼ãƒ‰å°‚有ライトのカーネル変数をセクションé…
113ç½®ã™ã‚‹ç›®çš„で
114のみ使用している.
115ccrhではpragmaによるセクションé…
116ç½®ã‚’行うため,上記マクロではextern宣言
117をするように変更し,prc_tool.c で変数の実体の宣言およびセクションé…
118ç½®ã‚’
119指定する.
120
121※defineマクロにおいてpragmaを展開することはできなかった.
122※defineマクロにおいてセクション名を展開することはできなかった.
123 #define SECTION section1
124 #pragma section SECTION
125 とすると,SECTIONというセクションにé…
126ç½®ã•ã‚Œã‚‹
127
128◯ カーネル変数,コードのセクションé…
129ç½®æŒ‡å®š
130
131非依存部で定義されている変数および関数などを,kernel.xxxxセクションに
132é…
133ç½®ã™ã‚‹ãŸã‚ã«ï¼ŒPlatfrom_Types.hにおいて,kernel_impl.hからincludeされた
134場合に,#pragma section kernel を生成するようにした.
135
136ここで,cfgのパス1においてkernelセクションにé…
137ç½®ã•ã‚Œã‚‹ã“とを防ぐために,
138ガードをかけている.
139cfgのパス1では,ccrhデフォルトのセクションé…
140ç½®æŒ‡å®šã‚’使用するため,kernel
141というセクションは存在しない.
142
143また,Os_Lcfg.c / kernel_mem.c に生成されるデータや関数もkernelセクション
144にé…
145ç½®ã™ã‚‹ãŸã‚ï¼Œprc.tfにおいて,#pragma section kernel を生成するようにした.
146
147◯ tf
148
149・OsMemoryModuleをサポートしないため,TOPPERS_SUPPORT_ATT_MOD を0にする.
150
151・MPUにセットする番地について,ccrhではセクションの境界を示すラベル名が,
152 '.'を含むため,C言語で使用することができない(構造体のメンバとして扱わ
153 れてしまう).そのため,パス2では0をMPU初期化ブロックに出力しておき,
154 パス4で,メモリオブジェクトとして登録されたセクションのラベル名から
155 é…
156ç½®ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’SYMBOLで取得して,MPU初期化ブロックに出力する.
157
158・ccrhでは,サイズが空のセクションをé…
159ç½®ã™ã‚‹ã¨ï¼Œè­¦å‘Šã‚’発する.
160 この警告を回避するために,arxmlで登録されたすべてのセクションに対して,
161 ダミーのシンボルを生成し,Os_Lcfg_asm.asm に出力する.
162
163・ccrh/ldscript.tf において,CS+でリンクオプションを指定するための
164 pythonスクリプト,ldscript.pyを出力する.
165
166 このpythonスクリプトを実行する方法として,以下の方法を検討した.
167
168 (1) パス4とatk2-sc3本体のビルド前にユーザに実行してもらう.
169  - ユーザの手間になる,実行し忘れによるエラーが起こる可能性もある.
170 (2) パス4とatk2-sc3本体のビルド前にCS+にプレビルド自動実行してもらう.
171  - プレビルド時にビルドオプションを書き換えることはできなかったため却下.
172 (3) CS+にパス2のビルド後にポストビルド自動実行してもらい,パス4と
173   atk2-sc3本体のプロジェクトファイル(xml)を書き換える.
174  - パス2のあとに書き換えたプロジェクトファイルを自動で開き直すところで
175  エラーとなり,ユーザに再度プロジェクトを開き直してもらう必
176要がある.
177 現状は(3)で実装
178している.
179
180 本スクリプトでは,セクションのé…
181ç½®é †ï¼ŒROM化するデータセクション,
182 アライメントするセクションのためのリンクオプションを指定する.
183
184・ccrhでは,出力セクションという概念がなく,å…
185¥åŠ›ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’メモリ
186 オブジェクトごとにまとめた出力セクションを生成し,その境界値を取得する
187 ことで,MPUの設定情
188報を生成するという従来手法(GCC依存部)が使用できない.
189 そのため,MPUに設定するアドレスを取得するために,すべてのセクションを
190 メモリオブジェクトごとに,リンク順にサーチし,始めて見つかった空でない
191 セクションの開始番地をそのメモリオブジェクトの開始番地として,最後に
192 見つかった空でないセクションの終了番地をそのメモリオブジェクトの終了
193 番地としている.
194
195・セクションのラベル名の制約により,kernel_mem.tf における標準のメモリ
196 オブジェクト初期化ブロックを生成できない.
197 その部分については,prc_meminib.tf で生成する.
198
199○ TIPS
200
201・sdata/sbss は,pragmaで変数をgp_dispxxセクションにé…
202ç½®ã™ã‚‹ã¨ç”Ÿæˆã•ã‚Œã‚‹
203・sdata/sbss は,デフォルトではgp相対でアクセスされない.-MApオプションを
204 つけてリンクした結果出力されるblsファイルを,コンパイルオプション-Omap=
205 で指定することで,gp相対でアクセスされるコードが生成される.
206 gp相対を使うのであれば,パス4のビルド時にもgp相対を使うようにビルドすべき
207 と考えられる.
208
Note: See TracBrowser for help on using the repository browser.