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

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

initial

File size: 56.6 KB
Line 
1 = TOPPERS/JSPカーネル ユーザズマニュアル =
2 (H8ターゲット依存部 (H8C(HEW)対応版))
3
4 (Release 1.4.4対応,最終更新: 29-Dec-2010)
5
6 ------------------------------------------------------------------------
7 TOPPERS/JSP Kernel
8
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-2007 by Industrial Technology Institute,
15 Miyagi Prefectural Government, JAPAN
16 Copyright (C) 2001-2004 by Dep. of Computer Science and Engineering
17 Tomakomai National College of Technology, JAPAN
18 Copyright (C) 2001-2004 by Kunihiko Ohnaka
19 Copyright (C) 2004 by Katsuhiro Amano
20
21 上記著作権者
22は,以下の (1)〜(4) の条件か,Free Software Foundation
23
24 によってå…
25¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
26 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
27 を改変したものを含む.以下同じ)を使用・複製・改変・再é…
28å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
29 利用と呼ぶ)することを無償で許諾する.
30 (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
31 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
32 スコード中に含まれていること.
33 (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
34 用できる形で再é…
35å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
36å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
37 者
38マニュアルなど)に,上記の著作権表示,この利用条件および下記
39 の無保証規定を掲載すること.
40 (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
41 用できない形で再é…
42å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
43 と.
44 (a) 再é…
45å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
46マニュアルなど)に,上記の著
47 作権表示,この利用条件および下記の無保証規定を掲載すること.
48 (b) 再é…
49å¸ƒã®å½¢æ…
50‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
51 報告すること.
52 (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
53 害からも,上記著作権者
54およびTOPPERSプロジェクトをå…
55è²¬ã™ã‚‹ã“と.
56
57 本ソフトウェアは,無保証で提供されているものである.上記著作権者
58お
59 よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
60 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
61 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
62
63 @(#) $Id: h8-renesas.txt,v 1.9 2007/03/23 07:27:55 honda Exp $
64
65 ------------------------------------------------------------------------
661. H8ターゲット依存部の概要
67
681. 1 ターゲットシステムと開発環境
69
70・Release1.4.1までのバージョンをお使いの方へ
71 Release1.4.2から割込みの扱いが大幅
72に変更されているため、旧バージョン
73をご使用の方は「2.2.1 割込みハンドラの登録方法」を参ç…
74§ã•ã‚ŒãŸã„。
75
76 本実装
77はgcc対応だったH8依存部を(株)ルネサス ソリューションズ製の開発
78環境H8C(HEW)に対応させたものである。
79
80 H8 プロセッサのターゲットシステムは、H8/3048F-ONEを搭載した以下の
81ボードである。
82
83 ・(株)北斗電子 H8/3048F-ONEスタータキット(型番HSB8F3048BF25)
84
85なお、何もしないタスク 1 個の最小構成でも、必
86要な RAM 容量は H8 の内
87蔵
88RAMの容量を超
89える。 このため、外部アドレス空間を有効にする必
90要がある。
91CPUモードはアドバンスドモードで使用することを前提としている。ノーマル
92モードで使用する場合は、アセンブラ部分を修正する必
93要がある。
94
951. 2 サポートする機能の概要
96
97 性能評価用システム時刻参ç…
98§æ©Ÿèƒ½ (vxget_tim)、割込みマスクの変更・参ç…
99§
100 (chg_ipm、 get_ipm)をサポートしているが、 割り込みの禁止と許可
101(dis_int、ena_int) はサポートしていない。
102
1031. 3 他のターゲットへのポーティング
104
105 H8/300H シリーズであれば、ポーティングは容易に出来ると思われる。
106
1071. 4 シリアルポート (SCI)
108
109 H8/3048FにはSCI0とSCI1の2本のシリアルポートがあり、user_config.hに
110定義しているTNUM_PORTにより何本使用するか指定できる。
111現在の実装
112では2本まで使用できる。 JSP カーネルのログ出力用にはSCI0を
113使用している。 シリアルポートの設定を以下に示す。
114
115 ・ボーレート   38400[bps]
116 ・データ長    8ビット
117 ・ストップビット 1ビット
118 ・パリティなし
119
1202. H8 プロセッサ依存部の機能
121
122 カーネルとシステムサービス機能の中で、H8依存の部分について解説する。
123
1242. 1 データ型
125
126 int型とunsigned int型のサイズは 16ビットである。また、処理系の制約か
127ら、64ビット整数はサポートしていない。
128
1292. 2 割込み管理機能と割込みハンドラ
130
131カーネル管理外の割込みはNMIのみである.よって,CPUロック状æ…
132‹ã‚„初期化
133ルーチン内
134では,NMI以外の割込みはすべて禁止されている.å…
135·ä½“的には、CPU
136ロック状æ…
137‹ã§ã¯CCRレジスタのIビットとUIビットをセットし、さらにカーネル
138内
139のフラグ変数をセットしている。
140 本実装
141ではSYSCRレジスタのUEビットをクリアし、CCRレジスタのIビットと
142UIビットを割込みマスク(IPM:Interrupt Priority Mask)として使用してい
143る。(レベル0とレベル1の割込みが使用できる。)
144
145DEF_INHで指定する割込みハンドラ番号(inhno)は,H8での例外ベクタ番号を
146表し,そのデータ型(INHNO)はunsigned int型に定義されている.
147DEF_INHで,例外ベクタ番号として有効でない値や,外部割込みに対応しない
148番号を指定した場合の動作は保証されない.
149
1502.2.1 割込みハンドラの登録方法
151
152jsp-1.4.1 H8依存部(gcc版)から割込みハンドラの登録方法が変更されている。
153変更点は以下の通り。
154 1.割込み優å…
155ˆåº¦åˆ¶å¾¡ã‚’サポート
156   ・割込みプライオリティ・レベル0
157   ・割込みプライオリティ・レベル1
158 2.割込みレベルの設定は2ヶ所で行う。
159   (1) 割込み要求時用プライオリティ・レベル
160      デバイスが割込みコントローラに要求する割込みレベル
161      各デバイスドライバの初期化処理にてIPRA、IPRBレジスタの
162      設定処理を行う。
163   (2) 割込み許可時用プライオリティ・レベル
164      割込みハンドラ呼び出し時に割込みマスクに設定する値
165      他の割込み要求をブロックするための値
166
167 3.デバイスドライバの初期化処理で、割込みレベルの設定を行う。
168   define_int_plevel( )を用いる。
169 4.cpu_support.Sで行っていた以下の記述は不要になった。
170  (割込みレベル制御を行ったため)
171   ・ハードウェア割込み許可 _xxxxx_enable_int
172   ・ハードウェア割込み禁止 _xxxxx_disable_int
173     gcc版では、割込み要求をクリアする処理を_xxxxx_disable_intに
174     記述していたが、renesas版では割込みハンドラのC言語ルーチン
175     またはそこから呼ばれる関数内
176に記述する方法を標準とする。
177 5.ユーザーが編集すべき部分は別ファイルに分離している。
178   システム依存部のintmask.inc
179 6.割込みベクタテーブルの自動生成
180   コンフィギュレーション時にDEF_INH( )の引数から自動生成する。
181
182割込みハンドラを登録する作業手順
183 タイマ割込みを例に説明する。
184
185 (1) 割込みハンドラの記述
186
187   旧版では、割込み要求をクリアする処理が必
188要な場合は
189   _xxxxx_disable_intに記述していたが、新版では割込みハンドラのC言
190   語ルーチン、またはそこから呼ばれる関数内
191に記述する方法を標準と
192   する。
193
194   タイマ割込みでの記述例:
195    jsp/systask/timer.c
196      timer_handler( )から呼び出されるhw_timer_int_clear( )
197      (jsp/config/h8-renesas/hw_timer.h)
198
199
200 (2) コンフィギュレーション・ファイルの記述
201
202   コンフィギュレーション・ファイルの記述方法は他のプロセッサと同様
203   である。
204   ベクタ番号はjsp/config/h8-renesas/h8_3048f.h等でマクロ定義している。
205   DEF_INH( )の第1引数の割込みハンドラ番号はプリプロセス後に整数定数
206   になっていなければならない。(自動割り付け非対応整数値パラメータ)
207   ベクタテーブル自動生成時もそれを仮定している。
208
209   タイマ割込みでの記述例:
210    jsp/systask/timer.cfg
211     DEF_INH(INHNO_TIMER, { TA_HLNG, timer_handler });
212
213
214 (3) 割込みプライオリティレベルの設定
215
216   IPRA,IPRBに設定する割込み要求時のプライオリティレベルと、割込み
217   ハンドラ呼び出し時に割込みマスクに設定するプライオリティレベル
218   の2つを割込み要因毎に設定する。
219
220 (3)-1 割込み要求時用プライオリティレベルの設定
221
222   初期化処理のcpu_initialize( )ですべての割込みをレベル0に初期化し
223   ている。
224   デバイスドライバの初期化処理で割込み要因毎のプライオリティ・レベ
225   ルを設定するための関数が用意されている。
226    
227   【C言語API】
228     void define_int_plevel(const IRC *irc);
229
230      IRC:Interrupt Request Controller
231         割込みコントローラ
232
233   【パラメータ】
234     const IRC *irc 設定データを格納した領域のå…
235ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹
236      UB *ipr:設定するIPRレジスタの番地
237           IPRAまたはIPRBレジスタ
238      UB bit :IPRレジスタの該当するビット番号
239      IPM ipm:設定する割込みレベル
240           IPM_LEVEL0,IPM_LEVEL1のいずれか
241
242   【リターンパラメータ】
243     なし
244
245   【機能】
246     ircが指し示す領域のデータを用いて、デバイスからの割込みの
247     プライオリティ・レベルを設定する。
248     この関数を呼び出す前にh8_sil.hをインクルードする必
249要がある。
250
251   【タイマ割込みでの記述例】
252
253     jsp/config/h8-renesas/cpu_config.c
254      const IRC TIMER_IRC = {(UB*)SYSTEM_TIMER_IPR,
255       SYSTEM_TIMER_IP_BIT,
256       SYSTEM_TIMER_IPM
257       };
258
259     jsp/config/h8-renesas/hw_timer.h
260      hw_timer_initialize( )
261      define_int_plevel(&TIMER_IRC);
262
263   設定に用いる値はマクロ定義されている。
264   
265   ・IPRA、IPRBレジスタのアドレス
266   jsp/config/h8-renesas/h8_3048f.h
267 #define H8IPRA 0xfffff8ul
268 #define H8IPRB 0xfffff9ul
269
270
271   ・IPRA、IPRBレジスタのビット番号
272   jsp/config/h8-renesas/h8_3048f.h
273   ・IPRA
274   #define H8IPR_IRQ0_BIT 7u /* IRQ0 */
275   #define H8IPR_IRQ1_BIT 6u /* IRQ1 */
276   #define H8IPR_IRQ2_BIT 5u /* IRQ2 */
277   #define H8IPR_IRQ3_BIT 5u /* IRQ3 */
278   #define H8IPR_IRQ4_BIT 4u /* IRQ4 */
279   #define H8IPR_IRQ5_BIT 4u /* IRQ5 */
280   #define H8IPR_WDT_BIT 3u /* WDT */
281   #define H8IPR_CMI_BIT 3u /* CMI */
282   #define H8IPR_ITU0_BIT 2u /* ITU0 */
283   #define H8IPR_ITU1_BIT 1u /* ITU1 */
284   #define H8IPR_ITU2_BIT 0u /* ITU2 */
285   
286
287   ・IPRB
288   #define H8IPR_ITU3_BIT 7u /* ITU3 */
289   #define H8IPR_ITU4_BIT 6u /* ITU4 */
290   #define H8IPR_DMAC_BIT 5u /* DMAC (CH0,1) */
291   #define H8IPR_SCI0_BIT 3u /* SCI0 */
292   #define H8IPR_SCI1_BIT 2u /* SCI1 */
293   #define H8IPR_AD_BIT 1u /* A/D */
294
295
296(3)-2 割込み許可時用プライオリティレベルの設定
297
298  ・****_intmaskマクロの定義
299   H8依存部では、静的API DEF_INH( )で割込みハンドラを定義すると、
300   カーネルコンフィギュレーションにより、割込みのå…
301¥å£å‡¦ç†ãŒ
302   vector.src内
303に自動生成される。
304   このå…
305¥å£å‡¦ç†ã§ã¯ã€C言語ルーチン****を呼び出す直前の割込み許可時
306   に割込みマスクに設定する値として、マクロ****_intmaskが定義されて
307   いると仮定しているので、割込み要因毎にIPM_LEVEL1、IPM_LEVEL2のい
308   ずれかに定義すること。
309   自分と同じレベルの割込みをマスクするため、IPMには1つ上のレベル
310   を設定する必
311要があるので、注意が必
312要である。
313   intmask.incで定義するのを標準とする。
314
315   【タイマ割込みでの記述例】
316    jsp/config/h8-renesas/hsb8f3048bf25/intmask.inc
317    
318    timer_handler_intmask: .DEFINE "IPM_LEVEL2"
319    
320
3212.2.2 割込みマスクの変更・参ç…
322§
323
324H8依存の機能として,CCRレジスタ中のIPMの値を変更するためのサービスコー
325ルchg_ipmと,参ç…
326§ã™ã‚‹ãŸã‚ã®ã‚µãƒ¼ãƒ“スコールget_ipmをサポートしている.
327なお,IPMの値を表すデータ型IPMは,unsigned char型に定義されている.
328
329これらのサービスコールは,タスクコンテキストでCPUロック解除状æ…
330‹ã®å ´åˆ
331にのみ呼び出すことができる.chg_ipmによりIPMをレベル0以外(すなわち,
332何らかの割込みが禁止されている状æ…
333‹ï¼‰ã«ã—た場合でも,ディスパッチは禁止
334されず,chg_ipmにより変更したIPMの値は,ディスパッチ後のタスクに引き継
335がれる.
336例えば,あるタスクでIPMをレベル1に変更した後,何らかの割込みにより別の
337タスクに切り替わると,切り替わった後のタスクでもIPMはレベル1になる.
338
339chg_ipmをサポートするために,割込みハンドラの出å…
340¥å£å‡¦ç†ãªã©ã«ã‚ªãƒ¼ãƒ
341ヘッドを生じている.そこで,SUPPORT_CHG_IPMというマクロにより,これら
342のサービスコールをサポートするかどうかを切り替えられるようにしている.
343SUPPORT_CHG_IPMは,user_config.hおよびuser_config_asm.incの中でマクロ
344定義されている.
345
346H8依存の割込みマスクの変更・参ç…
347§ã®ãŸã‚ã®ã‚µãƒ¼ãƒ“スコールの仕様は次の通り.
348
349(1) chg_ipm 割込みマスクの変更
350
351【C言語API】
352 ER ercd = chg_ipm(IPM ipm);
353
354【パラメータ】
355 IPM ipm 設定すべき IPM の値
356
357【リターンパラメータ】
358 ER ercd エラーコード
359
360【エラーコード】
361 E_CTX コンテキストエラー
362 E_PAR パラメータエラー(ipm が不正)
363
364【機能】
365
366IPM(Interrupt Priority Mask)を ipm で指定された値に設定する.
367IPMで用いる値として、以下のマクロが用意されている。
368 IPM_LEVEL0:レベル0 すべての割込みを受け付ける
369 IPM_LEVEL1:レベル1 NMIおよびプライオリティレベル1の割込みのみを
370            受け付ける
371 IPM_LEVEL2:レベル2 NMI以外の割込みを受け付けない
372
373
374IPMに指定した値が上記のマクロ以外の場合,E_PARエラーとなる.IPM を
375IPM_LEVEL0以外に設定した場合でも,ディスパッチは禁止されない.また,設
376定したIPMの値は,ディスパッチ後も引き継がれる.ディスパッチを禁止し
377たい場合には,dis_dspと併用すればよい.
378
379なお,このサービスコールを用いて,IPMをIPM_LEVEL2(NMI以外の割込みを禁
380止)に設定してもCPUロック状æ…
381‹ã¨ã¯åŒºåˆ¥ã•ã‚Œã‚‹ã€‚(ディスパッチが禁止され
382ない。)
383
384このサービスコールは,タスクコンテキストで CPUロック解除状æ…
385‹ã®æ™‚のみ呼
386び出すことができる.非タスクコンテキストや CPUロック状æ…
387‹ã§å‘¼ã³å‡ºã—た場
388合には,E_CTXエラーとなる.
389
390(2) get_ipm 割込みマスクの参ç…
391§
392
393【C言語API】
394 ER ercd = get_ipm(IPM *p_ipm);
395
396【パラメータ】
397 なし
398
399【リターンパラメータ】
400 ER ercd エラーコード
401 IPM ipm 現在の IPM の値
402
403【エラーコード】
404 E_CTX コンテキストエラー
405
406【機能】
407
408現在の IPM(Interrupt Priority Mask)の値を読み出し,ipm に返す.
409
410このサービスコールは,タスクコンテキストで CPUロック解除状æ…
411‹ã®æ™‚のみ呼
412び出すことができる.非タスクコンテキストや CPUロック状æ…
413‹ã§å‘¼ã³å‡ºã—た場
414合には,E_CTXエラーとなる.
415
416
4172. 3 CPU例外管理機能と CPU例外ハンドラ
418
419H8プロセッサ自体にCPU例外を扱う機能が備わっていないため、カーネルのH8
420依存部もCPU例外をサポートしていない。従って、CPU 例外ハンドラの設定関
421数 define_exc( )は何もしない関数である。
422他機種との互換性のため、CPU例外ハンドラ番号のデータ型 (EXCNO) は
423unsigned int型に定義されている。
424
4252. 4 スタートアップモジュール
426
427 H8依存のスタートアップモジュール (start.src) は次に示す初期化を実行し
428た後、カーネル (kernel_start) を起動する。ただし、 kernel_start から戻っ
429てくることは想定していない。
430
431 (1) スタックポインタの設定
432
433 (2) ハードウェア依存の初期化処理の呼出し
434      HARDWARE_INIT_HOOKマクロが定義されていれば、ハードウェア依
435     存の初期化処理を呼出す。この関数はカーネルを起動する前に、
436     ターゲット依存のハードウェア的な初期化を行うために用意し、そ
437     の関数名をHARDWARE_INIT_HOOKマクロとして定義する。
438      本実装
439では、外部メモリ空間の有効化の他にも、SYSCRレジスタ
440     のUEビットのクリア、割込み優å…
441ˆãƒ¬ã‚¸ã‚¹ã‚¿(IPRAとIPRB)の個別割り
442     込みの優å…
443ˆåº¦ã®è¨­å®šã‚’行っている。
444     HARDWARE_INIT_HOOKマクロの定義はsys_config_asm.incで行うのを
445     標準とする。
446
447 (3) Bセクションの初期化
448 Bセクションのå…
449¨é ˜åŸŸã‚’ 0 クリアする。
450
451 (4) Dセクションの初期化
452 Dセクションを外部 RAM に転送する。
453
454 (5) ソフトウェア環境依存の初期化処理の呼出し
455      SOFTWARE_INIT_HOOKマクロが定義されていれば、ソフトウェア環
456     境依存の初期化処理を呼出す。この関数はカーネルを起動する前に、
457     ソフトウェア環境(ライブラリ等)依存の初期化を行うために用意す
458     る。例えば、ライブラリの初期設定などである。
459     その関数名をSOFTWARE_INIT_HOOKマクロとして定義する。
460     SOFTWARE_INIT_HOOKマクロの定義はsys_config_asm.incで行うのを
461     標準とする。
462
4632. 5 割込み発生時のスタック使用量について
464
465 タスクコンテキスト実行時に割込みが発生し、その結果、タスクスイッチす
466る場合、タスクスタックには以下の情
467報が積まれるため、タスク毎に32バイト
468ずつスタック領域を余分に確保する必
469要がある。
470(その後、å…
471ƒã®ã‚¿ã‚¹ã‚¯ã«æˆ»ã£ã¦ãã‚‹éš›ã«ã€ã‚¿ã‚¹ã‚¯ä¾‹å¤–処理ルーチンが起動され
472る場合はさらにタスクスタックの領域が必
473要になる。)
474
475  タスクスタックに積まれる内
476容
477   ・戻り番地
478   ・CCRレジスタ
479   ・er0〜er6
480
4813. システム依存部の機能
482
4833. 1 システムクロックドライバ
484
485 システムクロックドライバが isig_tim を呼出す周期は、 user_config.h内
486
487のTIC_NUME と TIC_DENO で定義されており、ディフォルトは 1[ms] 周期であ
488る。
489この定義を変更することで、isig_tim を呼出す周期を変更できる。 ただし、
490タイマ精度の単位で端数になる値を設定すると、 isig_tim の呼出し周期に誤
491差が発生する。
492
493【H8/3048F-ONEスタータキット】
494タイマに供給されているクロック周波数は3072[kHz]であり
495(クロック24.576[MHz]の8分周)、タイマ精度は
496 (1000000/3072)[nsec]=約0.326[μsec]
497である。
498ディフォルトのクロックデバイスとして、H8/3048F-ONEではITU0を使用して
499いる。
500
501
5023. 2 性能評価用システム時刻参ç…
503§æ©Ÿèƒ½
504
505 H8では、性能評価用システム時刻参ç…
506§æ©Ÿèƒ½ (vxget_tim) をサポートしてい
507る。
508
509【C言語API】
510  ER vxget_tim(SYSUTIM *p_sysutim);
511
512【パラメータ】
513 なし
514
515【リターンパラメータ】
516 SYSUTIM sysutim:リセットからの経過時間(μsec単位)
517
518【エラーコード】
519 E_CTX:非タスクコンテキストから呼び出した
520
521【機能】
522リセットからの経過時間をμsec単位で計測し、実行性能の計測機能を提供す
523る。SYSUTIM型は UW型(32 ビット符号なし整数型)であるため、μsec単位で換
524算するとリセットから約71分間毎にオーバーフローして、ゼロに戻る。2点間
525の実行時間を計測するときにこのオーバーフローが発生していないか注意が必
526
527要である。
528
529【H8/3048F-ONEスタータキット】
530タイマ自体の精度は約0.326[μsec]であり、1μsec単位まで有効である。
531
5323. 3 シリアルインタフェースドライバ
533
534 H8/3048F-ONEには SCI0 と SCI1 の 2 本のシリアルポートがあり、
535user_config.h に定義している TNUM_PORT により何本使用するか指定できる。
536現在の実装
537では 2 本まで使用できる。 JSP カーネルのログ出力用には SCI0
538を使用している。
539
5403. 4 メモリマップ
541
5423. 4. 1 H8/3048F-ONEスタータキットのメモリマップ
543
544 モード6に固定されている。
545
546 0x00,0000 - 0x01,ffff 内
547蔵ROM 128KB
548              ベクタテーブル、P,C,Dセクション
549 0x20,0000 - 0x27,ffff 外部RAM 512KB
550              R(D),Bセクション
551 0xff,ef10 - 0xff,efff 内
552蔵RAM 4KB
553              非タスクコンテキスト用スタックエリア
554
555
5564. サンプルプログラムの実行手順
557
5584. 1 開発環境
559
560 開発環境は、Windows 2000上で、(株)ルネサス ソリューションズ製の開発
561環境を用いた。
562 本開発に用いたツールのバージョンを以下に示す。
563
564 ・コンパイラ、アセンブラ、最適化リンケージエディタ
565   型番:R0C40008XSW06R
566   バージョン:V.6.1.2
567 ・統合開発環境 HEW4.02.00.022
568 ・デバッガ E10T-USB Emulator
569   添付ソフトウェアのバージョン:2.01.00
570
571また、他にも下記のツールが必
572要になる。
573
574 ・MinGW
575 コンフィギュレータをビルドするために必
576要となる。
577 通常は既にコンパイル済みのものが用意されているため,そちらを
578 利用すればよい.
579 MinGW (Minimalist GNU for Windows)
580 http://www.mingw.org/
581 http://sourceforge.net/projects/mingw/ (インストーラのå…
582¥æ‰‹å…
583ˆ)
584
585 ・Windowsのコマンド・プロンプトで動作するPerl
586   下記の4.3 (1)の作業で使用する。
587   Active Perl v5.8.8
588  é…
589å¸ƒå…
590ƒã€€http://www.ActiveState.com
591
5924. 2 コンフィギュレータのビルド
593
594user.txt を参ç…
595§ã®ã“と。
596
5974. 3 サンプルプログラムのビルド
598
599(1) HEW上でのビルド
600
601ワークスペース・ファイルを開く
602 jsp/tools/H8-RENESAS/H8-RENESAS.hws
603 ワークスペース作成時とディレクトリが異なる旨の警告が出るが無視する。
604 
605 ※ ツールチェーンのバージョンが異なる旨の警告が出る場合
606   上記のバージョンより古いツールチェーンでの動作は未確認である。
607
608このワークスペースには4つのプロジェクトが登録されている。
609 ・genoffset:TCB構造体内
610のオフセットを求める。
611 ・libkernel:カーネル・ライブラリのビルドを行う。
612 ・configuration:カーネル・コンフィギュレーション、ベクタテーブルの
613          自動生成を行う。
614 ・sample:サンプル・アプリケーションのビルドを行う。
615
616プロジェクトの依存関係のため、以下の順番でビルドする。
617 1.libkernelプロジェクトをアクティブプロジェクトに設定する
618 2.libkernelプロジェクトをビルドする
619 3.sampleプロジェクトをアクティブプロジェクトに設定する
620 4.sampleプロジェクトをビルドする
621
622手順1と2は最初の1回のみでよく、アプリケーション部分のみソー
623スコードを変更した場合はリビルドする必
624要はない。
625configurationプロジェクトとoffsetプロジェクトは依存プロジェ
626クトとして自動的にビルドされる。
627
628sampleプロジェクトのビルドが成功すると、
629 ・実行ファイル sample1.abs
630 ・Sレコードファイル sample1.mot
631が生成されるよう設定してある。
632
633注意:
634 libkernelのビルドよりå…
635ˆã«genoffsetプロジェクトをビルドする必
636要が
637あるが、プロジェクト間の依存関係を設定してもsampleプロジェクトを起点と
638した場合(依存関係がネストしている場合)は正しい順序で実行されないので、
639手動でlibkernelプロジェクトを予めビルドしておく。
640
641備考
642 ReleaseビルドとDebugビルドの切替はHEWのビルド・コンフィギュレーショ
643ンによって行う。ビルド・コンフィギュレーションを変更すると、ファイルの
644依存性チェックに失敗する場合がある。
645(インクルードファイルが見つからない等) 
646その場合は、以下の手順で回避できる。
647 1.Windowsのコマンド・プロンプト(DOS窓)を開いて、
648   jsp/tools/H8-RENESAS/libkernelディレクトリでclean.batを実行する。
649 2.HEWの「ビルド」−「すべてをビルド」コマンドを実行する。
650
651
652(2) ターゲット・ボードのダウンロード
653
654ボードやデバッグツールのマニュアルを参ç…
655§ã€‚
656
6574. 4 よくある質問と回答
658
659Q. genoffsetとlibkernel, configurationとsampleのようにファイルを
660  生成するフェーズとそれをコンパイルするフェーズを異なるプロジェクト
661  に割り当てているのは何か理由があるのでしょうか?
662
663A. 最初は同じプロジェクト内
664に生成フェーズとコンパイルフェーズを
665  å…
666¥ã‚Œã‚ˆã†ã¨ã—たのですが、HEWはプロジェクトのビルドを開始する
667  際にファイルの依存関係をスキャンし、必
668要なソースファイルがそ
669  ろっていないビルドが止まってしまうため、現在のような形に分割
670  しました。
671  カスタムフェーズの順番は調整できますが、依存関係スキャンのタ
672  イミングは変えられないようです。
673
6745. ファイル構成
675
6765. 1 ディレクトリ・ファイル構成
677
678 (1) config/h8-renesas/
679
680 cpu_config.c H8プロセッサ依存部のC関数
681 cpu_config.h H8プロセッサ依存部の構成定義
682 cpu_config_asm.inc 上記のアセンブラ用定義
683 cpu_context.h H8プロセッサ依存部のコンテキスト操作
684 cpu_defs.h H8プロセッサ依存部のアプリケーション用定義
685 cpu_insn.h H8プロセッサの特殊命令の関数定義
686 cpu_support.src H8プロセッサのアセンブリ関数
687 cpu_rename.def カーネルの内
688部識別名のリネームとその解除の
689          定義リスト
690 cpu_unrename.h カーネルの内
691部識別名のリネーム解除の定義
692 cpu_rename.h カーネルの内
693部識別名のリネームの定義
694 cpu_rename_asm.inc 上記のアセンブラ用定義
695 h8.h H8/300Hプロセッサのå…
696±é€šå®šç¾©
697 makeoffset.c offset.h生成サポート用ソースファイル
698 start.src スタートアップモジュール
699 tool_config.h H8プロセッサの開発環境依存モジュール定義
700 tool_defs.h H8プロセッサの開発環境依存定義
701 vector_header.src 割込みベクタテーブルのヘッダー部分
702 h8_sil.c   SILのH8向け拡張 C関数
703 h8_sil.h   SILのH8向け拡張 構成定義
704
705 h8_3048f.h H8/3048Fプロセッサの定義
706           H8/3048F、H8/3048F-ONEå…
707¼ç”¨
708 h8_3048f_asm.inc 上記のアセンブラ用定義
709 util.h   ビット番号などの定義
710 util_asm.inc   上記のアセンブラ用定義
711
712 hw_serial.c SCI の変数と関数
713 hw_serial.cfg SCI のコンフィギュレーションファイル
714 hw_serial.h SCI の定義
715 hw_timer.h ITU の定義
716
717 (2) config/h8-renesas/hsb8f3048bf25/
718 (株)北斗電子H8/3048F-ONEスタータキット(型番HSB8F3048BF25)
719 ボードの依存部分
720
721 sys_config.c HSB8F3048BF25ボード依存部のC関数
722 sys_config.h HSB8F3048BF25ボード依存部の構成定義
723 sys_config_asm.inc 上記のアセンブラ用定義
724 sys_defs.h HSB8F3048BF25ボード依存部のアプリケーション
725          用定義
726 sys_support.src HSB8F3048BF25ボード依存部のアセンブリ関数
727 sys_rename.def カーネルの内
728部識別名のリネームとその解除の
729          定義リスト
730 sys_rename.h カーネルの内
731部識別名のリネームの定義
732 sys_unrename.h カーネルの内
733部識別名のリネーム解除の定義
734
735 以下は、ユーザーが編集する必
736要があるファイル
737 user_config.h  ユーザー・コンフィギュレーション情
738報の定義
739 user_config_asm.inc 上記のアセンブラ用定義
740 intmask.inc   割込みマスクの定義
741
742 (3) utils/
743     ビルドに必
744要なユーティリティ群
745
746  h8/      gcc版とå…
747±é€šã®ã‚¹ã‚¯ãƒªãƒ—ト
748  grep_def_inh.pl Perlスクリプト生成用フィルタ
749
750  h8-renesas/ H8C依存のスクリプト
751  copy_kernel_source.bat
752           カーネルのソースコードをAPI毎にコピー
753           するバッチファイル
754  genoffset    TCB構造体内
755のオフセットを算出するperlスクリプト
756  genvector.pl   ベクタテーブル生成用スクリプト
757  gen_intentry.pl 割込みå…
758¥å£å‡¦ç†ç”Ÿæˆç”¨ã‚¹ã‚¯ãƒªãƒ—ト
759
760
761 (4) tools/H8-RENESAS/
762 HEW4.0用のワークスペース・ディレクトリ
763  (株)北斗電子H8/3048F-ONEスタータキット(型番HSB8F3048BF25)
764
765 readme.txt
766  ビルド手順を示したreadmeファイル
767 H8-RENESAS.hws
768  ワークスペース・ファイル
769 sample1.cfg
770  サンプル・アプリケーションのコンフィギュレーション
771  ファイル
772 sample1.c
773  サンプル・アプリケーションのC言語ソース・ファイル
774 sample1.h
775  サンプル・アプリケーションのインクルード・ファイル
776
777 (5) tools/H8-RENESAS/genoffset/
778     以下の処理を行うプロジェクト・ディレクトリ
779      ・カーネル・ソースコードをAPI毎にコピー
780      ・TCB構造体内
781のオフセット算出
782     
783 call_copy_kernel_source.bat
784   copy_kernel_source.batを呼び出すためのバッチファイル
785
786 call_genoffset.bat
787   genoffsetスクリプトを呼び出すためのバッチファイル
788
789      Debug/ デバッグ用ビルドディレクトリ
790       offset.inc  TCB構造体内
791のオフセット定義ファイル
792
793      Release/ デバッグ用ビルドディレクトリ
794       offset.inc  TCB構造体内
795のオフセット定義ファイル
796
797 (6) tools/H8-RENESAS/libkernel
798     カーネル・ライブラリのビルドを行うプロジェクト・ディレクトリ
799     
800     kernel_source/   中間ファイルを格納するディレクトリ
801       clean.bat   中間ファイルを削除するためのバッチファイル
802
803 (7) tools/H8-RENESAS/configuration
804     カーネル・コンフィギュレーションを行うプロジェクト・ディレクトリ
805     
806 call_configuration.bat
807           コンフィギュレーターとベクタテーブル生成
808           スクリプトの呼び出し
809
810      Debug/ デバッグ用ビルドディレクトリ
811       kernel_id.h    ID自動割付けの定義ファイル
812       debug_kernel_cfg.c コンフィギュレータの出力結果
813       debug_vector.src 自動生成された割込みベクタテーブル
814
815      Release/ デバッグ用ビルドディレクトリ
816       kernel_id.h    ID自動割付けの定義ファイル
817       relase_kernel_cfg.c コンフィギュレータの出力結果
818       release_vector.src 自動生成された割込みベクタテーブル
819      
820
821 (7) tools/H8-RENESAS/sample
822     サンプル・アプリケーションのビルドを行うプロジェクト・ディレクトリ
823     
824     set_sp.hdc     デバッガでスタックポインタを初期化するための
825               バッチファイル
826
827
8286. アプリケーション開発者
829向けの情
830å ±
831
832アプリケーション開発者
833に有益と思われる情
834報について述べる。
835
8366.1 カーネルの設定変更方法
837
838H8依存部では、様々
839な設定変更が容易にできるよう、設定箇所をを以下の2つ
840のファイルにまとめている。
841 ・user_config.h    C言語向け設定ファイル
842 ・user_config_asm.inc アセンブラ言語用設定ファイル
843
844ユーザーはこの2つのファイル内
845のマクロ定義を変更するだけで、カーネルの
846ソースファイルを読まなくてもある程度までカーネルの設定を変更できる。
847設定項
848目によってはC言語用とアセンブラ言語用の両方の定義が必
849要になるの
850で注意。
851
852以下、設定ファイル内
853の各マクロの意味を述べる。
854
855・å…
856¨èˆ¬çš„な設定項
857目
858
859(1) SUPPORT_CHG_IPM
860chg_ipmをサポートするかどうかの定義
861設定ファイル:user_config.h、user_config_asm.inc
862
863(2) SUPPORT_VXGET_TIM
864vxget_timをサポートするかどうかの定義
865この設定を変更した場合は、ファイル分割を再度行う必
866要がある。
867設定ファイル:user_config.h
868
869(3) CPU_CLOCK
870プロセッサに供給されるクロック周波数 [Hz]
871設定ファイル:user_config.h、user_config_asm.inc
872
873(4) STACKTOP
874非タスクコンテキスト用スタックポインタの初期値
875設定ファイル:user_config_asm.inc
876
877(5) E10T
878E10T-USB Emulatorでデバッグする場合はこのマクロを定義する。
879E10T使用時に必
880要な処理をスタートアップルーチンで行う。
881定義場所:アセンブラのオプションとして与える。
882     (HEWのビルドオプション)
883
884
885・シリアルポート関連の設定項
886目
887
888(1) TNUM_PORT
889サポートするシリアルデバイスの数(最大 2)
890設定ファイル:user_config.h、user_config_asm.inc
891
892以下、ポート2の設定はTNUM_PORTを2に設定した場合のみ有効である。
893
894(2) SYSTEM_PORTID、USER_PORTID
895システムポート、ユーザーポートのポート番号
896USER_PORTIDの設定はTNUM_PORTを2に設定した場合のみ有効である。
897設定ファイル:user_config.h
898
899(3) SCI_LOW_PORTID
900ポーリングによる低レベル出力に用いるシリアルポートのポート番号
901設定ファイル:user_config.h
902
903(4) SCI_PORT1_BAUD_RATE、SCI_PORT2_BAUD_RATE
904ポート1,2のボーレート [bps]
905設定ファイル:user_config.h
906
907(5) SCI_PORT1_IPM、SCI_PORT2_IPM
908ポート1,2の割込みプライオリティ・レベル
909(割込み発生時のIRCへの要求レベル)
910設定ファイル:user_config.h
911
912(6) H8_CFG_SCI_ERR_HANDLER
913シリアル受信エラー割込みに通常の受信割込みとは別のハンドラを割り当てる
914かどうかの定義
915設定ファイル:user_config.h、user_config_asm.inc
916
917・タイマ関連の設定項
918目
919
920(1) TIC_NUME、TIC_DENO
921タイムティックの周期の分子、分母
922設定ファイル:user_config.h
923
924(2) TIMER_CLOCK
925タイマに供給されるクロック周波数[kHz]
926設定ファイル:user_config.h
927
928(3) SYSTEM_TIMER_IPM
929タイマ割込みのプライオリティ・レベル
930(割込み発生時のIRCへの要求レベル)
931設定ファイル:user_config.h
932
933
9346.2 アプリケーション向けに提供される機能
935
936H8依存部ではアプリケーションを開発しやすくするため、以下の機能を提供し
937ている。
938
9396.2.1 微少時間待
940ち
941
942機種非依存部のsil.hでプロトタイプ宣言しているsil_dly_nse関数は引数が
943UINT型であり、int型が2バイトであるこの処理系では約65μsecまでしか表現
944できない。これより長い時間待
945ちを行うため、引数をUW型に変更した別関数
946sil_dly_nse_longを用意している。どちらもnsec単位で待
947ち時間を指定する。
948t_services.hやs_services.hをインクルードすることにより(cpu_defs.hを介
949して)利用できる。
950
951【C言語API】
952  void sil_dly_nse_long(UW dlytim);
953
954【パラメータ】
955 UW dlytim    待
956ち時間[nsec]
957
958【リターンパラメータ】
959 なし
960
961【エラーコード】
962 なし
963
964【機能】
965
966ソフトウェア・ループにより時間待
967ちを行う。
968同様の機能を提供するsil_dly_nse関数は最大約65μsecまで待
969ち時間を指定で
970きるのに対して、sil_dly_nse_long関数は約4.3secまで指定できる。
971
9726.2.2 I/OポートのDDRレジスタへのアクセス補助機能
973
974H8のI/Oポートのデータ・ディレクション・レジスタDDRは書き込み専用であり、
975そのままでは所望のビットだけを変更することができない。
976(bset,bclr命令でも回避不可)
977また、カーネルのスタートアップルーチンでもいくつかのDDRレジスタに対し
978て設定を行っているため、そのままではカーネルとアプリケーションの間で整
979合性を保つことができない。
980そのため、本実装
981では、メモリ上にテンポラリを用意して、DDRの現在値を保
982持する方法を採っている。
983本機能を利用する場合はh8_sil.hをインクルードする必
984要がある。
985ポート番号はIO_PORT型として定義してあり、IO_PORT1, IO_PORT2, IO_PORT3,
986IO_PORT4, IO_PORT5, IO_PORT6, IO_PORT8, IO_PORT9, IO_PORTA, IO_PORTBの
987いずれかを指定する。(ポート7はå…
988¥åŠ›å°‚用のため、DDRレジスタがない。)
989ポート番号として、これら以外の値を指定した場合はassert文でエラーとなる。
990
991
992(1) sil_reb_ddr  DDRレジスタの読み出し
993
994【C言語API】
995  UB sil_reb_ddr(IO_PORT port);
996
997【パラメータ】
998 IO_PORT port    ポート番号
999
1000【リターンパラメータ】
1001 DDRレジスタの値
1002
1003【エラーコード】
1004 なし
1005
1006【機能】
1007
1008portで指定されるポート番号のDDRレジスタの値を読み出す。
1009
1010(2) sil_wrb_ddr  DDRレジスタへの書き込み
1011
1012【C言語API】
1013  void sil_wrb_ddr(IO_PORT port, UB data);
1014
1015【パラメータ】
1016 IO_PORT port  ポート番号
1017 UB data    書き込む値
1018
1019【リターンパラメータ】
1020 なし
1021
1022【エラーコード】
1023 なし
1024
1025【機能】
1026
1027portで指定されるポート番号のDDRレジスタに値dataを書き込む。
1028
1029(3) sil_anb_ddr  DDRレジスタのAND演算
1030
1031【C言語API】
1032  void sil_anb_ddr(IO_PORT port, UB data);
1033
1034【パラメータ】
1035 IO_PORT port  ポート番号
1036 UB data    AND演算を行う値
1037
1038【リターンパラメータ】
1039 なし
1040
1041【エラーコード】
1042 なし
1043
1044【機能】
1045
1046portで指定されるポート番号のDDRレジスタに対して、値dataとのAND演算を
1047行う。
1048
1049(4) sil_orb_ddr  DDRレジスタのOR演算
1050
1051【C言語API】
1052  void sil_orb_ddr(IO_PORT port, UB data);
1053
1054【パラメータ】
1055 IO_PORT port  ポート番号
1056 UB data    AND演算を行う値
1057
1058【リターンパラメータ】
1059 なし
1060
1061【エラーコード】
1062 なし
1063
1064【機能】
1065
1066portで指定されるポート番号のDDRレジスタに対して、値dataとのOR演算を
1067行う。
1068
1069
10707. カーネル移植者
1071向けの情
1072å ±
1073
1074 H8依存部を他のターゲット・ボードへを移植する際に必
1075要な情
1076報を以下に
1077述べる。
1078
10797.1 マクロ定義
1080
1081(1) SYSCR_SYS
1082SYSCRの初期値
1083ボード依存部で定義する内
1084容
1085 ・ビット6-4 STS:スタンバイ・タイマ・セレクト
1086 ・ビット2 NMIEG:NMIエッジ
1087定義ファイル:sys_config.h
1088残りのビットはCPU依存部で定義している。
1089
1090(2) HARDWARE_INIT_HOOK
1091スタートアップルーチンからハードウェア依存の初期化処理を呼び出すときは、
1092そのå…
1093ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’マクロ定義する。
1094(GNU ldのPROVIDE命令と同等の機能がないため)
1095定義ファイル:sys_config_asm.inc
1096
1097(3) SOFTWARE_INIT_HOOK
1098スタートアップルーチンからソフトウェア環境(特にライブラリ)依存の処理を
1099呼び出すときは、そのå…
1100ˆé ­ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’マクロ定義する。
1101定義ファイル:sys_config_asm.inc
1102
1103(4) WITHOUT_INNER_RAM
1104内
1105蔵RAMを使用しない場合は、このマクロを定義する。
1106内
1107蔵RAMを使用しない場合は、外部RAMが有効にならないとスタックエリアが使
1108えない。そのため、戻り番地をスタックに積むH8プロセッサの関数呼び出しは
1109(アセンブラであっても)このタイミングではまだできない。つまり、
1110HARDWARE_INIT_HOOKで示される関数からは無条件分岐命令で戻ってくる。
1111(ラベルstart_1をエクスポートする。)
1112定義ファイル:sys_config_asm.inc
1113
1114(5) EXCLUSIVE_BUS
1115sleep命令によってソフトウェア・スタンバイ・モードに遷移する際、バス権
1116要求の競合が起こる場合がある。(例えば、H8/3048Fのハードウェア・マニュ
1117アル「6.4.4 ソフトウェア・スタンバイ・モードへの遷移」参ç…
1118§ï¼‰
1119EXCLUSIVE_BUSマクロが定義されると、ディスパッチャのsleep命令の前後にバ
1120ス権要求の排他制御が挿å…
1121¥ã•ã‚Œã‚‹ã€‚
1122定義ファイル:sys_config_asm.inc
1123
1124(6) SOFTWARE_TERM_HOOK
1125atexit( )から呼び出す処理が外部定義されている場合は、その関数名をマクロ
1126定義する。atexit( )では
1127 ・外部定義があれば、それを呼び出す
1128 ・外部定義がなければ、何もしない(空の定義)
1129定義ファイル:sys_config.h
1130
1131(7) DDRアクセスルーチンのための定数定義
1132
1133(a) DDRレジスタのアドレス
1134DDRレジスタのアドレスを以下のマクロ名で定義する。
1135 H8P1DDR, H8P2DDR, H8P3DDR, H8P4DDR, H8P5DDR,
1136 H8P6DDR, H8P8DDR, H8P9DDR, H8PADDR, H8PBDDR
1137定義ファイル:sys_config.hからインクルードされるファイル
1138       h8_30xxf.hで定義するのを標準とする。
1139
1140(b) DDRレジスタの初期値
1141スタートアップルーチン実行直後のDDRレジスタの値を以下のマクロ名で定義
1142する。
1143  H8P1DDR0、H8P2DDR0、H8P3DDR0、H8P4DDR0、H8P5DDR0、
1144  H8P6DDR0、H8P8DDR0、H8P9DDR0、H8PADDR0、H8PBDDR0
1145定義ファイル:sys_config.h
1146
11477.2 ビルド用のスクリプトについて
1148
1149(a) jsp/tools/H8-RENESAS/configuration/call_configurator.bat
1150
1151HEWでは、(ワークスペース・ディレクトリの外にある)外部ツールを相対パ
1152ス指定で呼び出せないため、このようなバッチファイルを介して、
1153 ・コンフィギュレータ
1154 ・Perlスクリプト
1155を呼び出している。
1156以下のxxxの部分を移植の際に変更する必
1157要がある。
1158
1159 ・システム依存部のディレクトリ名
1160   cfg.exe -s %1 -c -obj -cpu h8 -system xxx
1161   xxxにはシステム依存部のディレクトリ名がå…
1162¥ã‚‹ã€‚
1163
1164 ・ベクタテーブルのサイズ
1165   genvector.pl -s xxx
1166   xxxにはベクタテーブルのサイズがå…
1167¥ã‚‹ã€‚
1168
1169また、環境によってはPerlのインタプリタへのパス設定も必
1170要になる可能性が
1171ある。
1172
1173(b) jsp/utils/h8-renesas/genvector.pl
1174
1175ベクタテーブル生成のためのPerlスクリプトgenvector.plの仕様
1176 -s n ベクターテーブルのサイズ
1177 nは整数定数を仮定しており、それ以外の引数が与えられた
1178 場合の動作は未定義である。
1179
1180(c) vector.src内
1181で用いられているマクロの仕様
1182
1183C言語ルーチンの関数名からå…
1184¥å£å‡¦ç†ã‚’生成するためのマクロINTHDR_ENTRYが
1185用意されている。スクリプトgenvector.plは、引数intmaskの値がintmask.inc
1186内
1187に****_intmaskの名でマクロ定義されていると仮定している。
1188  
1189   【アセンブラ言語でのAPI】
1190     INTHDR_ENTRY c_routine, intmask
1191
1192   【パラメータ】
1193     c_routine:C言語ルーチンの関数名
1194     intmask :C言語ルーチンを呼び出す直前の割込み許可時に割込み
1195           マスクに設定する値
1196           IPM_LEVEL1、IPM_LEVEL2のいずれかにすること。
1197           自分と同じレベルの割込みをマスクするため、IPMには
1198           1つ上のレベルを設定する。
1199
1200   【展開結果】
1201     割込みのå…
1202¥å£å‡¦ç†
1203
1204   【機能】
1205     C言語ルーチンの関数名からå…
1206¥å£å‡¦ç†ã‚’生成する。
1207
1208・備考
1209 ベクタテーブルとå…
1210¥å£å‡¦ç†ã‚’vector.srcにまとめた結果、ラベル
1211_kernel_****_entryはグローバルにå…
1212¬é–‹ã™ã‚‹å¿…
1213要がなくなったため、ローカ
1214ルラベルとしている。それに伴ないcpu_config.hのINT_ENTRYマクロではå…
1215±é€š
1216部とのインターフェースを合わせるため、ダミーのラベル名を使用している。
1217
1218
12197.3 その他
1220・4.3節(2)のプロジェクト構成について
1221 ファイル分割はlibkernelプロジェクトの1フェーズとして定義した方が見
1222通しが良くなるが、この方法では、ファイル分割を一番最初に実行するビル
1223ド・フェーズとして定義しても、ファイル分割を行う前にコンパイル・フェー
1224ズのファイルの依存関係のチェックが行われ、ファイルが開けない旨の警告が
1225大量に表示されてしまう。
1226
1227
12288. 制限事項
1229
1230
1231・ホストマシンのOS
1232 Windows9x系はサポートしない。
1233
1234・コンフィギュレータのチェッカ(chk)は実装
1235していない。
1236
1237・HEWが提供する内
1238部レジスタ定義ファイルには対応していない。
1239 (gcc版とデバイスドライバをå…
1240±æœ‰ã™ã‚‹ãŸã‚ï¼‰
1241
1242・64ビット整数はサポートしない。
1243 (処理系の制限事項
1244)
1245
1246・システムログ機能について
1247int型が2バイトのため、システムログ機能(syslog, syslog_n)の%d, %u, %x,
1248 %Xによる整数表示では2バイトデータしか表示できない。2バイトより大きい
1249データを表示する場合は、表示するデータを2バイトずつに分割してシステム
1250ログ機能に渡す必
1251要がある。(ポインタ型表示の%pを使えば4バイトまで表示
1252できる。)
1253
1254・相対時間について
1255 RELTIM型が2バイトのため、(1msec単位で換算すると)相対時間が約65秒に
1256制限される。RELTIM型を4バイトにしたい場合はjsp/include/itron.hにある
1257RELTIM型の定義を変更する。
1258
1259変更前:typedef UINT RELTIM; /* 相対時間 */
1260変更後:typedef UW RELTIM; /* 相対時間 */
1261
1262・atexit の処理とデストラクタの実行
1263 (tool_config.hのcall_atexit())
1264 他機種ではカーネルライブラリのリビルドを行わなくても、
1265software_term_hook()の定義があれば、自動的に呼び出されるようになってい
1266るなっているが、h8-renesasではsoftware_term_hook()に相当する関数名をマ
1267クロSOFTWARE_TERM_HOOKとして定義し、カーネルライブラリをリビルドする必
1268
1269要がある。
1270 詳しくは「7.1 マクロ定義」の「(6) SOFTWARE_TERM_HOOK」を参ç…
1271§ã€‚
1272
1273
12749. gcc版(jsp-1.4.1 H8依存部)からの変更点
1275
1276・割込みハンドラの登録方法の変更(2.2節参ç…
1277§ï¼‰
1278・割込み優å…
1279ˆåº¦åˆ¶å¾¡ã®ã‚µãƒãƒ¼ãƒˆ
1280  ・2レベル
1281  ・これに伴い、割込みマスクの変更・参ç…
1282§æ©Ÿèƒ½ã‚’サポート
1283・微少時間待
1284ちをサポート
1285・DDRレジスタ・アクセス・ルーチンの新設
1286・ユーザー設定項
1287目の整理
1288
1289
1290変更履歴
1291
1292'05/05/10 サポート開始
1293
1294'05/12/28 Release1.4.2
1295 修正
1296 ・割込みベクタテーブル
1297   ・自動生成するよう仕様変更
1298   ・perlスクリプトのヒア・ドキュメントが出力時に文字化けする不å…
1299·åˆ
1300    を修正(å…
1301¨è§’文字を半角文字に変更)
1302 ・割込みマスクの定義方法
1303   ・ユーザーは割込みマスクの定義だけ行えば済むように仕様変更
1304   ・グローバルだった_kernel_xxxx_entryラベルはローカルラベルに変更
1305   ・割込みのå…
1306¥å£å‡¦ç†ã‚‚vector.srcに書き出すよう変更
1307 ・TCB構造体のオフセット算出
1308   ・MOV.B #8:8,R0Lのように定数部のビット幅
1309が明示されたときにパース
1310    できない不å…
1311·åˆã‚’修正
1312   ・オフセット値が16進数の場合に対応
1313   ・makefile.mak内
1314のパス設定で「スペースを含むロングネーム」につ
1315    いての記述を追加
1316 ・登録されていない割込みの扱い
1317   ・cpu_experr( )
1318     ・割込み発生直前のスタックポインタの値(オフセット値)を修正
1319     ・syslog( )で4バイトデータを表示するため、%p指定(ポインタ型)
1320      を用いるよう変更
1321      (%x(整数型)では2バイトしか表示できないため)
1322   ・no_reg_exception()
1323     ・スタックから取り出したpcとccrを分離していなかった不å…
1324·åˆã‚’
1325      修正
1326     ・syslog関数で4バイトデータをそのまま引数にしていた不å…
1327·åˆã‚’
1328      修正
1329       (intサイズ(=2バイト)の引数しか渡せない)
1330 ・アセンブラルーチンの設計見直し
1331   ・CPUロックフラグのクリア位置の見直し
1332     ・割込みの出口処理
1333     ・実行すべきタスクがない場合の割込み待
1334ち
1335   ・条件分岐命令直前の不要なor命令を削除
1336     (その前のmov命令だけで十分)
1337 ・DDRアクセスルーチン
1338   ・sil_reb_ddr(), sil_wrb_ddr()
1339      assert文の引数チェックの範囲ミスを修正
1340 ・ビルド手順
1341    Releaseビルド時にモジュール間最適化を積極的に適用するように
1342    設定を変更
1343 ・システムログ機能
1344   ・表示できるデータサイズについて制限事項
1345を追記
1346
1347'07/03/xx Release1.4.3
1348 ・ベクタテーブル自動生成
1349   ・perlスクリプトをgcc版と完å…
1350¨ã«å…
1351±é€šåŒ–
1352     ・0ベクタ問題に対応
1353     ・ベクタサイズの引数チェックを追加
1354     ・割込み番号にuがついている場合の処理を追加
1355   ・移植性を考æ…
1356®ã—て、genvector.plの処理を2つに分割
1357     ・genvector.pl:ベクタテーブルの生成(H8S版とå…
1358±é€šåŒ–)
1359     ・gen_intentry.pl:割込みのå…
1360¥å£å‡¦ç†ï¼ˆINTENTRY)の生成
1361   ・これに伴ない、grep_def_inh.plとのインターフェースを変更
1362   ・処理系毎の改行コードの違いに対応
1363   ・DEF_INH文の途中で改行があるとパースに失敗する問題を修正
1364   ・filter1.plとfilter2.plを1つにまとめ、grep_def_inh.plに改名
1365    (gcc版とHEW版で個別にfilter2.plを用意する必
1366要がなくなった)
1367 ・割り込みレベルの設定
1368   ・h8_sil.hのdefine_int_plevel()
1369     cpu_insh.hをインクルードしないで、bitset(),bitclr()を呼び
1370     出していた不å…
1371·åˆã‚’修正
1372   ・bitset, bitclr
1373     (アセンブラで記述した)関数呼び出しからマクロ定義に変更
1374       →関数呼び出しのオーバーヘッドを無くすため
1375 ・ビルド手順
1376   ・DebugとReleaseでカーネルコンフィギュレーション結果を別々
1377に
1378    持てるように、ビルド手順を変更
1379   ・API毎のファイルコピー処理にバッチファイルを使用すると
1380    無用なメッセージが大量に表示されるため、perlで処理する
1381    よう変更
1382   ・H8S版との整合性
1383     カスタムビルドでhmakeを呼び出さず、バッチファイルのみで
1384     処理するようビルド手順を変更
1385     これにより、
1386      ・hmakeへのパス設定が不要になる。
1387       (プロジェクトファイルの可搬性が向上)
1388      ・カスタムビルド内
1389で行っていたプリプロセスが不要になるので
1390       処理時間が短縮
1391 ・特殊レジスタの操作を処理系純正のライブラリに変更
1392 ・DDRアクセス関数
1393   ポート番号の型をINT型からIO_PORT型に変更
1394 ・SILのメモリ空間アクセス関数を機種依存部で定義
1395   コンパイラの警告を回避するため
1396 ・サンプルプログラム
1397   user_config.hからTASK_PORTIDの定義を削除
Note: See TracBrowser for help on using the repository browser.