source: anotherchoice/tags/jsp-1.4.4-full-UTF8/doc/sh2.txt@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 26.9 KB
Line 
1
2 = TOPPERS/JSPカーネル ユーザズマニュアル =
3 (SH2 ターゲット依存部)
4
5 (Release 1.4.1対応,最終更新: 25-Jun-2010)
6
7------------------------------------------------------------------------
8 TOPPERS/JSP Kernel
9 Toyohashi Open Platform for Embedded Real-Time Systems/
10 Just Standard Profile Kernel
11
12 Copyright (C) 2000-2004 by Embedded and Real-Time Systems Laboratory
13 Toyohashi Univ. of Technology, JAPAN
14 Copyright (C) 2001-2010 by Industrial Technology Institute,
15 Miyagi Prefectural Government, JAPAN
16 Copyright (C) 2002-2004 by Hokkaido Industrial Research Institute, JAPAN
17
18 上記著作権者
19は,以下の (1)〜(4) の条件か,Free Software Foundation
20 によってå…
21¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
22 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
23 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
24å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
25 利用と呼ぶ)することを無償で許諾する.
26 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
27 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
28 スコード中に含まれていること.
29 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
30 用できる形で再é…
31å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
33 者
34マニュアルなど)に,上記の著作権表示,この利用条件および下記
35 の無保証規定を掲載すること.
36 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
37 用できない形で再é…
38å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
39 と.
40 (a) 再é…
41å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
42マニュアルなど)に,上記の著
43 作権表示,この利用条件および下記の無保証規定を掲載すること.
44 (b) 再é…
45å¸ƒã®å½¢æ…
46‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
47 報告すること.
48 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
49 害からも,上記著作権者
50およびTOPPERSプロジェクトをå…
51è²¬ã™ã‚‹ã“と.
52
53 本ソフトウェアは,無保証で提供されているものである.上記著作権者
54お
55 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
56 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
57 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
58
59 @(#) $Id: sh2.txt,v 1.5 2005/07/06 00:45:07 honda Exp $
60------------------------------------------------------------------------
61
62
631.SH2 ターゲット依存部の概要
64
65基本的にSH1.txtと同様である。
66
671.1 ターゲットシステムと開発環境
68
69SH2プロセッサのターゲットシステムはSH7145、SH7615を搭載した以下のボー
70ドである。
71
72・(株)アルファプロジェクト製のAP_SH2F_6A(CPU: SH7145)
73・(株)北斗電子製のHSB7615IT(CPU: SH7615)
74
75開発環境には、GCC などの GNU開発環境を用い、オブジェクトファイルフォー
76マットは ELF を標準とする。
77
781.2 サポートする機能の概要
79
80SH1/2依存の機能として、割込みマスクの変更・参ç…
81§(chg_ixx、get_ixx)と、
82性能評価用システム時刻参ç…
83§æ©Ÿèƒ½(vxget_tim)をサポートしている。割込み
84の禁止と許可(dis_int、ena_int)はサポートしていない。
85
861.3 DSP
87
88DSPレジスタの待
89避は行っていない。
90
91
921.4 GDB スタブ
93
94GDBスタブについてはhttp://www.hokkaido-iri.go.jpよりé…
95å¸ƒä¸­ã€‚
96
971.5 シリアルポート
98
99カーネルのログ出力用にシリアルポートを1つ使用する。
100シリアルポートの設定は
101 ・8ビット
102 ・パリティなし
103 ・ストップビット:1ビット
104 ・ボーレート:
105である。
106
107
1082.SH2プロセッサ依存部の機能
109
110この節では、カーネルおよびシステムサービスの機能の中で、SH2依存の部分
111について解説する。SH1版と同じである。
112
1132.1 データ型
114
115signed int型,unsigned int型,size_t型のサイズは,いずれも32ビットであ
116る.
117
1182.2 割込み管理機能と割込みハンドラ
119
120カーネル管理外の割込みとしては、 NMI がある。よって、CPUロック状æ…
121‹ã‚„初
122期化ルーチン内
123では、NMI 以外の割込みはすべて禁止されている。å…
124·ä½“的には、
125IPM(Interrupt Priority Mask)が 15 に設定される。
126
127将来的にGDBスタブを利用することを考æ…
128®ã—て、ソースコード内
129に以下のよう
130な記述を含む。
131ボード上に NMI å…
132¥åŠ›ã‚’持たないターゲットのため、GDB のスタブがホストの
133マシンと通信するためのシリアルポートの優å…
134ˆåº¦ã‚’ 15 で登録し、GDB で
135Ctrl-C を押すと 割り込みがå…
136¥ã‚Šã‚¹ã‚¿ãƒ–に制御が移るようにしてある。この機
137能を使用するためにはCPUロック状æ…
138‹ã§ã¯ã€å„ªå…
139ˆåº¦ãŒ 14 になるようにしなけ
140ればならない。そのため、CPUロックで設定される優å…
141ˆåº¦ã‚’マクロ MAX_IPMで
142指定している。MAX_IPM はcpu_config.h の中で #define されている。スタブ
143を使う場合はMAX_IPMを14に、スタブを使わない場合はMAX_IPMを15に設定して
144いる。
145
146SH1/2依存の機能として、SR(Status Register)中の 割り込みマスクビット(I3〜
147I0)の値を変更するためのサービスコール chg_ipm と、参ç…
148§ã™ã‚‹ãŸã‚ã®ã‚µãƒ¼ãƒ“
149スコール get_ipm をサポートしている。なお、割り込みマスクビットの値を
150表すデータ型 IPM は、unsigned int型に定義されている。
151
152これらのサービスコールは、タスクコンテキストで CPUロック解除状æ…
153‹ã®å ´åˆ
154にのみ呼び出すことができる。chg_ipm により IPM を 0 以外(すなわち、何
155らかの割込みが禁止されている状æ…
156‹)にした場合でも、ディスパッチは禁止さ
157れず、chg_ipm により変更した IPM の値は、ディスパッチ後のタスクに引き
158継がれる。例えば、あるタスクで IPM を 1 に変更した後、何らかの割込みに
159より別のタスクに切り替わると、切り替わった後のタスクでもIPMは1になる。
160
161chg_ipm をサポートするために、割込みハンドラの出å…
162¥å£å‡¦ç†ãªã©ã«ã‚ªãƒ¼ãƒãƒ˜ãƒƒ
163ドを生じている。そこで、SUPPORT_CHG_IPM というマクロにより、これらのサー
164ビスコールをサポートするかどうかを切り替えられるようにしている。
165SUPPORT_CHG_IPM は、user_config.h の中で #define されている。
166
167SH1/2依存の割込みマスクの変更・参ç…
168§ã®ãŸã‚ã®ã‚µãƒ¼ãƒ“スコールの仕様は次の通
169り。
170
171(1) chg_ipm 割込みマスクの変更
172
173【C言語API】
174 ER ercd = chg_ipm(IPM ipm);
175
176【パラメータ】
177 IPM ipm 設定すべき IPM の値
178
179【リターンパラメータ】
180 ER ercd エラーコード
181
182【エラーコード】
183 E_CTX コンテキストエラー
184 E_PAR パラメータエラー(ipm が不正)
185
186【機能】
187
188IPM(Interrupt Priority Mask)を ipm で指定された値に設定する。指定した
189値が 0〜14ないし0〜13以外の場合、E_PARエラーとなる。IPM を0以外
190(1〜MAX_IPM-1)に設定した場合でも、ディスパッチは禁止されない。また、
191設定した IPM の値は、ディスパッチ禁止後も引き継がれる。
192
193なお、このサービスコールを用いて、IPM を MAX_IPM (すべての割込みを禁止)
194に設定することはできない。IPM を MAX_IPM にしたい場合には、loc_cpu を
195使うべきである。
196
197このサービスコールは、タスクコンテキストで CPUロック解除状æ…
198‹ã®æ™‚のみ呼
199び出すことができる。非タスクコンテキストや CPUロック状æ…
200‹ã§å‘¼ã³å‡ºã—た場
201合には、E_CTXエラーとなる。
202
203(2) get_ipm 割込みマスクの参ç…
204§
205
206【C言語API】
207 ER ercd = get_ipm(IPM *p_ipm);
208
209【パラメータ】
210 なし
211
212【リターンパラメータ】
213 ER ercd エラーコード
214 IPM ipm 現在の IPM の値
215
216【エラーコード】
217 E_CTX コンテキストエラー
218
219【機能】
220
221現在の IPM(Interrupt Priority Mask)の値を読み出し、ipm に返す。
222
223このサービスコールは、タスクコンテキストで CPUロック解除状æ…
224‹ã®æ™‚のみ呼
225び出すことができる。非タスクコンテキストや CPUロック状æ…
226‹ã§å‘¼ã³å‡ºã—た場
227合には、E_CTXエラーとなる。
228
229
2302.3 CPU例外管理機能とCPU例外ハンドラ
231
232DEF_EXC で指定する割込みハンドラ番号(excno)は、SH2 での ベクタテーブル
233のベクタ番号を表し、そのデータ型(EXCNO)は unsigned int型に定義されてい
234る。DEF_EXC で、ベクタ番号として有効でない値や、CPU例外に対応しない番
235号を指定した場合の動作は保証されない。
236
237CPU例外ハンドラに渡されるp_excinfは、CPU例外発生時のコンテキストを保存
238したスタックへのポインタが渡される。スタックの構造を以下に示す。
239
240
241 ----------------------
242 | PR |
243 ----------------------
244 | R7 |
245 ----------------------
246 | R6 |
247 ----------------------
248 | R5 |
249 ----------------------
250 | R4 |
251 ----------------------
252 | R3 |
253 ----------------------
254 | R2 |
255 ----------------------
256 | R1 |
257 ----------------------
258 | R0 |
259 ----------------------
260 | PC |
261 ----------------------
262 | SR | <-- p_excinf
263 ----------------------
264
265 PR:Procedure Register
266 SR:Status Register
267 PC:Program Counter
268
269また、CPU例外発生時のPCの値はインクリメントされる。そのため、CPU例外ハ
270ンドラから復帰を行うと、CPU例外が発生した命令の次の命令から実行を再開
271する。
272
273
274
2752.4 スタートアップモジュール
276
277SH2依存のスタートアップモジュール(start.S)では、次の初期化処理を行う。
278
279(A) プロセッサモードの初期化とスタックポインタの初期化
280
281割り込みマスクを MAX_IPM に設定する。
282
283次に、スタックポインタ(r15)を STACKTOP に設定する。ここで割込みスタッ
284クポインタに設定されたスタック領域は、カーネル起動後は非タスクコンテキ
285スト用のスタック領域として使われる。STACKTOP は、user_config.h 部で定義
286することを想定している。
287
288(B) hardware_init_hook の呼出し
289
290hardware_init_hook が 0 でない場合には、hardware_init_hook を呼び出す。
291hardware_init_hook は、カーネルが起動される前に行う必
292要があるターゲッ
293ト依存の初期化を行うために用意している。hardware_init_hook がどこでも
294定義されていない場合、リンカでこのシンボルを 0 に定義する(リンカスク
295リプト内
296に記述あり)。
297
298(C) bssセクションと dataセクションの初期化
299
300bssセクションをゼロクリアする。また、dataセクションを初期化する。
301
302(D) software_init_hook の呼出し
303
304software_init_hook が 0 でない場合には、software_init_hook を呼び出す。
305software_init_hook は、カーネルが起動される前に行う必
306要があるソフトウェ
307ア環境(å…
308·ä½“的には、ライブラリ)依存の初期化を行うために用意している。
309software_init_hook がどこでも定義されていない場合、リンカでこのシンボ
310ルを 0 に定義する(リンカスクリプト内
311に記述あり)。
312
313(E) カーネルの起動
314
315kernel_start へ分岐し、カーネルを起動する。kernel_start からリターンし
316てくることは想定していない。
317
318
3192.5 割込み発生時のスタック消費量について
320
321以下の理由により、各タスクスタックはタスク自身が使用する分に加えて最大
322240バイト余分に用意する必
323要がある。
324
325JSPカーネルではタスクスタックの他に割込みスタックを用意し、非タスクコ
326ンテキストは割込みスタックで実行される。
327SH1/2は例外/割込み受付時に割込み禁止になる機構がハードウェアで用意されて
328いない。そのため、割込みのå…
329¥å£å‡¦ç†ã§ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã«ã‚ˆã£ã¦å‰²è¾¼ã¿ç¦æ­¢ã«ã™
330る必
331要がある。å…
332¥å£å‡¦ç†ã§ã¯å‰²è¾¼ã¿ç¦æ­¢ã«ç§»è¡Œã™ã‚‹ãŸã‚ã«ï¼ˆå‰²è¾¼ã¿è¨±å¯ã®çŠ¶æ…
333‹
334で)スタックにr0,r1を待
335避する。(SR(Status Register)とPC(Program
336Counter)は割込み受付け時にハードウェアが自動的に待
337避を行う。)
338このとき、多重割込みが発生すると割り込みスタックに切り替える前に同様の
339フレームがスタック上に生成される。SH2は割り込みレベルが15段あるので、
340最悪のタイミングで割込みが発生すると、スタックが240バイト消費される。
341(4バイト×4レジスタ×15セット)
342
343例外/割り込みのネスト回数のカウント用にカーネル内
344で変数intnestを用意
345し、非タスクコンテキストとタスクコンテキストの判別はこの変数により
346行っている。
347
348
3492.6 MACHとMACL (積和レジスタ)
350 MACH:Multiply and accumulate high register
351 MACL:Multiply and accumulate low register
352
353MACHとMACLについては、gccに-mhitachiオプションをつけると、関数でMACHと
354MACLを使用する場合、スタックに保存してから使用し、関数を抜けるとå…
355ƒã«æˆ»
356すため、割込みでは保存していない。また、自らディスパッチャを呼び出し、
357ディスパッチする場合は、関数呼び出しになるため、この呼び出しにまたがっ
358て、これらのレジスタを使うことはないため保存していない。そのためアセン
359ブラのコードを使用する場合もこのルールに従う必
360要がある。
361なお、割込みからのディスパッチ(受動的ディスパッチ)では保存している。
362
363
3642.7 GBR (Global Base Register)
365
366gccはGBRを使用しないため、割込みハンドラのå…
367¥å£ã§ã¯ä¿å­˜ã—ていない。割込
368みハンドラ内
369でGBRを使う場合はアプリケーション側でGBRの待
370避/保存を行う
371必
372要がある。また、上記のMACHとMACLと同じ理由により、自らディスパッチャ
373を呼び出す場合にも保存していない。なお、割込みからのディスパッチ(受動
374的ディスパッチ)では保存している。
375
376
377
3783.システム依存部の機能
379
3803.1 システムクロックドライバ
381
382システムクロックドライバが isig_tim を呼び出す周期は、user_config.h 中
383のTIC_NUME と TIC_DENO で定義されている(デフォルトでは 1ミリ秒周期)。
384この定義を変更することで、isig_tim を呼び出す周期を変更することができ
385る。
386ただし、タイマの精度が 1μ秒であるため、1μ秒単位で端数になる値を設定
387した場合には、isig_tim の呼出し周期に誤差が生じることになる。
388デフォルトではSH2の内
389蔵CMT/FRTを使用している。タイマハンドラの優å…
390ˆåº¦ã¯
391user_config.hでマクロTIMER_INTLVLとして定義している。(デフォルトでは4)
392
3933.2 性能評価用システム時刻参ç…
394§æ©Ÿèƒ½
395
396SH1/2依存部では、性能評価用システム時刻参ç…
397§æ©Ÿèƒ½(vxget_tim)をサポートして
398いる。性能評価用システム時刻の精度は 1μ秒単位であるが、タイマの現在値
399を読み出すために一時的にタイマを停止させる必
400要があるため、vxget_tim を
401呼ぶ度にシステムクロックが少しづつ遅
402れることになる。なお、SYSUTIM型は
403UD型(64ビットの符号無し整数型)に定義している。
404
4053.3 シリアルインタフェースドライバ
406
407シリアルインタフェースドライバは、SH2内
408蔵のSCI(Serial Communication
409Interface)/SCIF(FIFO内
410蔵Serial CommunicationInterface)をサポートし
411ており、カーネルのログ出力用に使用している。シリアル割込みハンドラの
412優å…
413ˆåº¦ã¯é€å—信およびエラー割込みå…
414±ã«user_config.hでマクロSCI_INTLVL/SCI
415F_INTLVLとして定義している。(デフォルトでは6)
416
417
4183.4 メモリマップ
419
420・(株)北斗電子製のHSB7615IT(CPU: SH7615)
421 0x0000,0000 - 0x001f,ffff コード領域(2MB)
422 0x0400,0000 - データ領域
423 - 0x040f,ffff 非タスクコンテキスト用のスタック領域
424データ領域と非タスクコンテキスト用スタック領域をあわせて1MB。内
425蔵メモ
426リは未使用。
427
428・(株)アルファプロジェクト製のAP-SH2F-6A(CPU: SH7145)
429 0x0000,0000 - 0x0003,ffff コード領域(256KB)
430 0x0040,0000 - データ領域(1MB)
431 - 0x004f,ffff 外付けメモリ終了
432 0xffff,e000 - データ領域(8KB)
433 - 0xffff,ffff 内
434蔵メモリ終了
435
436
4373.5 サンプルプログラムの実行
438
439・(株)北斗電子製のHSB7615SE(CPU: SH7615)
440あらかじめROMに書き込まれているモニタを起動する。
441Lコマンドでjsp.srecをメモリにロードする。
442G 04000400でサンプルプログラムを動作させる。
443サンプルプログラムのメッセージはSCIF1から出力される。
444他のボードなどにおいて、ROMから実行する場合、shelf.ldとMakefile.config内
445の
446アドレスの指定に注意。
447
448・(株)アルファプロジェクト製のAP-SH2F-6A(CPU: SH7145)
449jsp.srecを付属のライターで書き込で実行する。
450サンプルプログラムのメッセージはSCI1から出力される。
451
452
4534.開発環境の構築
454
455開発環境の構築方法については、GNU開発環境構築マニュアルを参ç…
456§ã™ã‚‹ã“と。
457開発にはLinux(Red Hat Linux release 7.2 Kernel 2.4.7-10)を用いた。
458動作確認したツールのバージョンは以下の通りである.
459 BINUTILS : 2.14
460 GCC-CORE : 2.95.3
461
462configure のオプションは--target=sh-hitachi-elfである。
463また、Windows上でCygwinを用いて開発する場合は、binutilsのconfigureのオ
464プションに --disable-nls も指定すること。
465
466
4675.制限事項
468
469
4705.1 システムインターフェースレイヤのsil_dly_nse()について
471
472実測はしていない。
473
474
4755.2 実行すべきタスクがない場合の割込み待
476ちについて
477  
478SH1と同じ。
479ディスパッチャの出口で実行すべきタスクがない(schedtsk==NULL)場合は、
480sleep命令によってプロセッサを省電力モードに切り替えて割込み待
481ちをして
482いる。(cpu_sapport.Sのdispatcher_2付近を参ç…
483§ï¼‰
484
485割込み許可後にsleep命令を実行しているため、割込み許可命令の実行前に割
486込み要求がå…
487¥ã£ã¦ã„る場合(あるいは割込み許可直後、sleep命令実行前に割
488込み要求がå…
489¥ã£ãŸå ´åˆï¼‰ã€å‰²è¾¼ã¿è¨±å¯å‘½ä»¤ã®å®Ÿè¡Œã¨å…
490±ã«å‰²è¾¼ã¿ãŒå—け付けられ、
491その復帰後にsleepしたままになってしまう。
492(reqflgのチェックに進まない。)
493
494この問題は,割込みの許可とsleep 状æ…
495‹ã¸ã®ç§»è¡ŒãŒã‚¢ãƒˆãƒŸãƒƒã‚¯ã«å®Ÿè¡Œã§ããªã„
496ことに起因する。SH3以降ではIPMとは別にSRのBLビットを使って割込みの禁止
497/許可を制御することにより、この問題を回避できるが、SH1/2ではIPMを設定す
498る以外に割込みを禁止/許可する方法がなく、割込み許可(割込み待
499ちのIPM設
500定)とsleepをアトミックに行う方法がない。
501そこでSH1/2依存部では、割込み受付時にスタックに積まれた戻り番地を多重割込
502みの出口処理でチェックし、戻り番地が上記のsleep命令に該当する場合は戻り
503番地を1命令分(2バイト)進めることによりこの問題を回避している。
504ただし、この方法では多重割込みの出口処理に数命令のオーバーヘッドが生じる。
505OMIT_POWER_CONTROLマクロを定義することでsleep命令の代わりにnop命令が挿å…
506¥
507され、多重割込みの出口処理でのチェックルーチンは省略される。(この場合は
508消費電力の点で不利になる。)
509
5105.4.2 割込み/CPU例外の出å…
511¥å£å‡¦ç†ã«ã¤ã„て
512
513SH1と同じ。
514SH1/2では割込み受付直後に割込み禁止になっていないため、割込みAのå…
515¥å£å‡¦ç†
516中に別の割込みBがå…
517¥ã‚‹å¯èƒ½æ€§ãŒã‚る。(これはハードウェアのアーキテク
518チャ上避けようがない。)割込みハンドラB内
519でタスク切り替えを起こすよう
520なサービスコールを呼ぶと割込みBの出口処理で別のタスクにディスパッチし
521てしまい、タスク2からå…
522ƒã®ã‚¿ã‚¹ã‚¯ã«æˆ»ã£ã¦ãã‚‹ã¾ã§ã€å‰²è¾¼ã¿Aの処理が遅
523れて
524しまう。
525また、割込みAがレベルトリガだと2回検出されてしまう問題もある。
526これを防ぐため、スタックに積んである戻りå…
527ˆã®IPMとtask_intmaskの値を比
528較して、å…
529¥å£å‡¦ç†ä¸­ã«å‰²è¾¼ã¿ãŒå…
530¥ã‚‰ãªã‹ã£ãŸã‹ãƒã‚§ãƒƒã‚¯ã—ている。
531(cpu_support.Sの_ret_int参ç…
532§ï¼‰
533
534SH1/2ではCPU例外を受け付けても割込みマスクは変化しないため、CPU例外のå…
535¥
536口処理中に割込みがå…
537¥ã£ãŸå ´åˆã€ä¸Šè¨˜ã®ã‚ˆã†ãªåˆ¤åˆ¥æ–¹æ³•ã§ã‚‚対処できない。そ
538のため、割込みの出口処理でスタックに積まれた戻り番地とCPU例外のå…
539¥å£å‡¦
540理の番地を比較して、戻りå…
541ˆãŒCPU例外のå…
542¥å£å‡¦ç†ã‹å¦ã‹ã‚’判別処理をオプ
543ションで用意している。この処理はCPU例外を登録したテーブルをサーチする
544処理がå…
545¥ã‚‹ãŸã‚ã€å‰²ã‚Šè¾¼ã¿ç¦æ­¢åŒºé–“が長くなる。この判別処理を有効にしたい
546場合はマクロSUPPORT_CPU_EXC_ENTRY_CHECKを定義する。
547タスクコンテキストで発生したCPU例外の処理は、後回しにされても割込みほ
548ど問題はないと考え、上記の処理はデフォルトでは無効にしている。(タスク
549コンテキストでのCPU例外がどのタスク内
550で発生するかは、割込みのようにタ
551イミングによるものではなく必
552然的なものであるため、CPU例外処理の優å…
553ˆé †
554位もそのタスクに準じるものとして判断した。)
555
556上記のテーブルはデフォルトでCPU例外を6要因登録できるようにしているが、
557アプリケーションでトラップ命令を使用し、カーネルでハンドリングする場合
558はuser_config.hのNUM_EXCの値を適宜変更する。
559
560
5615.4 gcc3.x対応について
562
563SH2版はgcc3.x系で動作確認はしていない。
564
565
5666.その他
567
5686.1 ディレクトリ・ファイル構成
569
570SH2 ターゲット依存部の各ファイルの概要は次の通り。
571
572 config/sh2/
573 Makefile.config MakefileのSH2依存定義
574 cpu_config.c プロセッサ依存部の関数
575 cpu_config.h プロセッサ依存部の構成定義
576 cpu_context.h コンテキスト操作
577 cpu_defs.h プロセッサ依存部のアプリケーション用定義
578 cpu_insn.h 低レベルのプロセッサ操作ルーチン
579 cpu_rename.def カーネルの内
580部識別名のリネーム定義
581 cpu_rename.h カーネルの内
582部識別名のリネーム
583 cpu_support.S プロセッサ依存部のサブルーチン
584 cpu_unrename.h カーネルの内
585部識別名のリネーム解除
586 makeoffset.c offset.h 生成サポートプログラム
587 sh7145.h SH7145の定義
588 sh7145cmt.h SH7145内
589蔵cmt用タイマードライバ
590 sh7145sci.c SH7145内
591蔵sci用シリアルドライバ
592 sh7145sci.h SH7145内
593蔵sci用シリアルドライバ
594 sh7615.h SH7615の定義
595 sh7615frt.h SH7615内
596蔵frt用タイマードライバ
597 sh7615scif.c SH7615内
598蔵scif用シリアルドライバ
599 sh7615scif.h SH7615内
600蔵scif用シリアルドライバ
601 start.S スタートアップモジュール
602 tool_config.h 開発環境依存部の構成定義(GNU開発環境用)
603 tool_defs.h 開発環境依存部のアプリケーション用定義(GNU開発環境用)
604
605
606
607 config/sh2/hsb7616it/
608 (株)北斗電子製のHSB7615IT(CPU: SH7615)
609
610 Makefile.config MakefileのHSB7615ITボード依存定義
611 hsb7616it.h HSB7615ITのハードウェア定義
612 hw_serial.cfg SIOドライバのコンフィギュレーションファイル
613 hw_serial.h SIOドライバ
614 hw_timer.h タイマ操作ルーチン
615 sh2.h SH2の定義
616 shelf.ld リンカスクリプト
617 shelf.stub.ld リンカスクリプト(stub用)
618 sys_config.c システム依存部の関数
619 sys_config.h システム依存部の構成定義
620 user_config.h ユーザー定義情
621å ±
622 sys_defs.h システム依存部のアプリケーション用定義
623 sys_rename.def カーネルの内
624部識別名のリネーム定義
625 sys_rename.h カーネルの内
626部識別名のリネーム
627 sys_support.S システム依存部のサブルーチン
628 sys_unrename.h カーネルの内
629部識別名のリネーム解除
630
631
632 config/sh2/apsh2f6a/
633 株)アルファプロジェクト製のAP-SH2F-6A(CPU: SH7145)
634
635 Makefile.config MakefileのAP-SH2F-6Aボード依存定義
636 apsh2f6a.h AP-SH2F-6Aのハードウェア定義
637 hw_serial.cfg SIOドライバのコンフィギュレーションファイル
638 hw_serial.h SIOドライバ
639 hw_timer.h タイマ操作ルーチン
640 sh2.h SH2の定義
641 shelf.ld リンカスクリプト
642 shelf.stub.ld リンカスクリプト(stub用)
643 sys_config.c システム依存部の関数
644 sys_config.h システム依存部の構成定義
645 user_config.h ユーザー定義情
646å ±
647 sys_defs.h システム依存部のアプリケーション用定義
648 sys_rename.def カーネルの内
649部識別名のリネーム定義
650 sys_rename.h カーネルの内
651部識別名のリネーム
652 sys_support.S システム依存部のサブルーチン
653 sys_unrename.h カーネルの内
654部識別名のリネーム解除
655
656
6576.2 ユーザーの設定項
658目
659
660SH1/2依存部では、ユーザーの設定項
661目をシステム依存部の2つのファイル
662Makefile.configとuser_config.hにまとめてあり、ユーザーはカーネル内
663部に
664立ちå…
665¥ã‚‰ãªãã¦ã‚‚、ある程度、設定を変更可能にしている。
666
667
668・_MACRO_ONLY
669  マクロ定義のみであり、アセンブラソースからインクルードしても
670  アセンブルエラーにならない部分を抽出するためのマクロ
671
672・SUPPORT_CHG_IPM
673  2.2節参ç…
674§
675
676・OMIT_POWER_CONTROL
677  5.2節参ç…
678§
679
680・GDB_STUB
681  GDB stub用。
682
683
684変更履歴
685
686'10/06/25
687 ・cpu_insn.hのset_sr(), cpu_defs.hの_disint_()
688   インラインアセンブラ(ldc rn, sr命令)のclobber変数
689   リストにmemoryとSRのTビットを追加
Note: See TracBrowser for help on using the repository browser.