/
m16c.txt
666 lines (495 loc) · 25.5 KB
/
m16c.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
= TOPPERS/JSPカーネル ユーザズマニュアル =
(M16C ターゲット依存部)
(Release 1.4.4対応,最終更新: 20-May-2011)
------------------------------------------------------------------------
TOPPERS/JSP Kernel
Toyohashi Open Platform for Embedded Real-Time Systems/
Just Standard Profile Kernel
Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
Toyohashi Univ. of Technology, JAPAN
Copyright (C) 2003-2004,2007,2010,2011 by Naoki Saito
Nagoya Municipal Industrial Research Institute, JAPAN
Copyright (C) 2003-2004 by Platform Development Center
RIOCH COMPANY,LTD. JAPAN
上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
によって公表されている GNU General Public License の Version 2 に記
述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
利用と呼ぶ)することを無償で許諾する.
(1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
権表示,この利用条件および下記の無保証規定が,そのままの形でソー
スコード中に含まれていること.
(2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
用できる形で再配布する場合には,再配布に伴うドキュメント(利用
者マニュアルなど)に,上記の著作権表示,この利用条件および下記
の無保証規定を掲載すること.
(3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
用できない形で再配布する場合には,次のいずれかの条件を満たすこ
と.
(a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
作権表示,この利用条件および下記の無保証規定を掲載すること.
(b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
報告すること.
(4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
本ソフトウェアは,無保証で提供されているものである.上記著作権者お
よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
------------------------------------------------------------------------
1. M16C ターゲット依存部の概要
1.1 ターゲットシステム
M16C ターゲット依存部は,ターゲットシステムとして
オークス電子株式会社の OASKS16 及び OAKS16-MINI をサポートしている.
OAKS16 はプロセッサとして M30620FCAFP-CPU を,OAKS16-MINI は
M30262F8FG-CPUを搭載している.
1.2 開発環境と実行環境
開発環境は,ルネサスエレクトロニクス社製の開発ツールを使用する.
ビルド管理の方法として,2つの形態を用意している.
ひとつは,ルネサスエレクトロニクス社製の統合開発環境 TM を使用して
開発を行う方法である.
もうひとつは,DOS窓から make コマンドを用いて開発を行う方法である.
ただし,この方法は以下の条件が必要である.
・OAKS16 ターゲット依存部で開発を行う場合にのみ利用可能
・開発ツール NC30WA がライブラリアンを利用可能な版であること
(最近の無償評価版コンパイラはこの条件を満たしている)
・perl が利用できること
開発環境の詳細に関しては,tools/M16C-RENESAS ディレクトリ中の
README.txt を参照のこと.
実行環境は Windows がインストールされていて,かつ,シリアルポートを
搭載したPC があれば,プログラムのビルドおよびボード上での実行が可能である.
1.3 サポートする機能の概要
ターゲット依存とされている機能に対するサポート状況は以下の通り.
・性能評価用システム時刻参照機能 (vxget_tim) : サポート
・割込みマスクの変更・参照 (chg_ixx, get_ixx):未サポート
・割り込みの禁止と許可(dis_int,ena_int):未サポート
1.4 他のターゲットへのポーティング
M16C は CPU上に多くのデバイスが実装されており,SFR という形式で
統一化されている.そのため M16C シリーズの CPU を搭載するボードであれば,
ポーティングは容易に出来ると思われる.
1.5 シリアルポート
ターゲットボードには UART1 ポートが実装されており,また UART0 ポートが
拡張可能となっている.ターゲット依存部のシリアルドライバでは 2つのポート
が必要に応じて利用可能となっている.
なお,OAKS16-MINI 版のシリアルドライバは,RAMサイズが 2KBという制約のため
XON/XOFF 及びエコー等の機能には対応していない.
シリアルポートの設定を以下に示す.
・ボーレイト,19200[bps].
・データ長,8 ビット.
・ストップビット,1 ビット.
・パリティなし.
1.6 対象とするソースコードの文字コード
TOPPERSプロジェクトから公開される TOPPERS/JSP カーネルのパッケージは,
文字コード及び改行コードが EUC+LF 及び SJIS+CRLF の 2つのパターンの
パッケージが存在する.EUC+LF版のパッケージでもダウンロードして展開後,
文字コード変換すれば使用可能と思われるが,M16C依存部を利用する場合は,
SJIS+CRLF のパッケージをダウンロードすることを推奨する.
2. M16C プロセッサ依存部の機能
この節では,カーネルおよびシステムサービスの機能の中で,M16C依存の部分
について解説する.
2.1 データ型
int 型と unsigned int 型のサイズは 16ビットである.また,_int64_ には
対応していない.
ポインタに関して,M16C では16ビット長の near ポインタ及び 32ビット長の
far ポインタが存在する.near ポインタは RAM 及びデバイスのポート領域である
SFR(Special Function Register) をアクセスする為のポインタである.
一方,far ポインタは near ポインタでアクセス可能な領域に加え
ROM 領域までアクセスが可能なポインタである.
このようにサイズが異なる2種類のポインタが存在するため,ユーザプログラム
を作成する場合,ポインタのサイズを意識する必要がある.
μITRON 4.0 仕様のデータ型の定義に関し,今回のポーティングでは
VP を near ポインタ,VP_INT を far ポインタとしている.
また,size_t 型のデータサイズについては,ルネサスエレクトロニクス製
Cコンパイラ NC30WA V.5.40 Release00 以降の版では32ビットであるが,
それより前の版のコンパイラでは16ビットと,既定サイズが異なるため,
注意が必要である.
2.2 割込み管理機能と割込みハンドラ
M16C のCPUロック状態の実装はフラグレジスタ中の割込み許可フラグ(Iフラグ)
を用いて行う.CPUロック状態では Iフラグが 0 に設定され,ハードウェア
マスカブル割込みは禁止(受付が保留)される.CPUロック解除状態では Iフラグ
が 1 に設定され,(割込み優先度レベル(IPL)の値にもよるが,)マスク可能な
割込み要求の受付が可能となる.
M16C 依存部におけるカーネル管理外の割込みは,NMI のみである.
DEF_INH で指定する割込みハンドラ番号(inhno)は,M16Cでのソフトウェア
割込み番号を表し,そのデータ型(INHNO)は char型に定義されている.
M16C プロセッサでは,割込みの入口処理のアドレスを割込みベクタで指定する.
割込みベクタは可変ベクタ及び固定ベクタから構成され,そのうち可変ベクタ
については VECTOR_ADR (start.a30) で指定されたアドレスへ静的に配置される.
本開発環境では,コンフィギュレーションにより生成された kernel_cfg.c の
内容を解析し,割込みベクタを生成するユーティリティを用意している.
このユーティリティは m16cvec.exe という名称で utils/m16c-renesas
ディレクトリに置かれ,前処理された kernel_cfg.c の内容を解析して
割込みベクタ定義ファイル m16cvec.incを生成する.
m16cvec.inc ファイルは CPU のスタートアップモジュールである start.a30
からインクルードされる.
なお,DEF_INH の割込みハンドラ番号として未定義の範囲の値を指定した場合,
その DEF_INH で指定した関数が,定義されていない割込み用の割込みハンドラ
として使われるように,設定される.
そのため,この方法を使えば,ユーザは未定義の(つまり,DEF_INH で定義して
いない)割込みが発生した場合のハンドラを設定することができる.
2.3 CPU 例外管理機能と CPU 例外ハンドラ
DEF_EXC で指定する例外ハンドラ番号(excno)は,M16Cでのソフトウェア割込み
番号を表し,そのデータ型(EXCNO)は char 型に定義されている.
CPU例外として,ハードウェアノンマスカブル割込みとソフトウェアノンマスカ
ブル割込みがある.ハードウェアノンマスカブル割込みについては,
リセットを除き,割込みベクタの設定が可能である.
CPU例外ハンドラに対応するベクタは,割込みハンドラの際と同様に
m16cvec.exe を用いて m16cvec.inc に設定する.
なお,CPU例外ハンドラ番号として未定義の値を設定した場合は,
定義されていないCPU例外ハンドラのハンドラとして設定される.
そのため,ユーザは未定義のCPU例外が発生した場合のハンドラを
設定することができる.
2.4 スタートアップモジュール
M16C 依存部のスタートアップモジュール (start.a30) は次に示す初期化を実行
した後,カーネル (kernel_start) を起動する.ただし,kernel_start から
戻ってくることは想定していない.電源投入直後に起動されるスタートアップ
モジュールの開始番地は m16cvec.inc のベクタ定義より _hardware_start と
されているが,それが配置されるアドレス値はリンク時に決定される.
(1) スタックポインタの設定
(2) CPU関連の初期設定
プロセッサモードの設定とクロックの設定を行う.
(3) hardware_init_hook の呼出し(未実行)
M16Cアセンブラは,C言語コンパイラと同期を取ったプリコンパイル処理がで
きない.hardware_init_hook の判定ができないため対応していない.
実際,M16Cのハードウェア設定に関しては,sys_initialize()関数中で行って
も十分に対応できると考えられるのでそちらで対応していただきたい.
(4) bssセクションと dataセクションの初期化
bssセクションをゼロクリアする.また,dataセクションを初期化する.
(5) software_init_hook の呼出し
software_init_hook の値が 0 でなければ,software_init_hook を呼び出す.
software_init_hook はカーネル起動前に,ソフトウェア環境 (ライブラリ等)
依存の初期化を行うために用意されている.
software_init_hook の定義は cpu_config.c 中で行う.既定では 0 に仮設定
されている.独自に別の場所で software_init_hook を定義する場合,マクロ
として EXTERNAL_SOFT_HOOK を定義する.そのようにすれば,元の変数定義は
含まれなくなるため,外部での設定が可能となる.
例えば,ライブラリの初期設定などを行いたい場合は,外部からの変数定義を
行うことが可能となる.
(6) カーネルの起動
kernel_start へ分岐し,カーネルを起動する.kernel_start からリターンし
てくることは想定していない.
2.5 割込み発生時のスタック使用量について
カーネル起動,及び,割込み発生時はタスク用のスタックとは別の割込み専用の
スタックを使用している.このスタック領域は RAMEND というマクロで
指定されたアドレスから低位方向に向かうメモリ上の領域に確保される.
そのため,システム起動時にはこの領域を確保する必要がある.
割込みネストレベルが 0(つまり,タスク実行中)で割込みが発生すると,
タスクコンテキスト用スタックにレジスタを保存した後,割込み用スタックに
スタックを切り替える.そのため,タスクコンテキスト用スタックには
汎用レジスタ,フラグ,PC など 20バイトの領域が余分に必要となる.
割込みネストレベルが 1 以上の状態 (つまり,非タスクコンテキスト)で
割込み要求が受け付けられた場合,割込みスタックにレジスタが保存される.
これには割込み発生毎に20バイトずつ必要である.それに加え,それぞれの
割込み処理ルーチンで使用されるスタックサイズが必要となる.
3. システム依存部の機能
3.1 システムクロックドライバ
システムクロックドライバが isig_tim を呼び出す周期は,sys_defs.h の中の
TIC_NUME と TIC_DENO で定義されている(標準は 1ミリ秒周期).
この定義を変更することで,isig_tim を呼び出す周期を変更することができる.
ただし,タイマの精度が1μ秒であるため,1μ秒単位で端数になる値を設定した
場合には,isig_timの呼出し周期に誤差が生じることになる.
3.2 性能評価用システム時刻参照機能
M16Cでは,性能評価用システム時刻参照機能 (vxget_tim) をサポートしている.
OAKS16 では精度 0.0625[us],OAKS16-MINIでは精度 1.6[us]である.SYSUTIM
型は UW 型 (32 ビット符号なし整数型) である.
3.3 シリアルインタフェースドライバ
OAKS16,OAKS16-MINI では UART0 と UART1 の 2つのシリアルポートが
ボード上に実装できる.このうちコネクタが実装された UART1 を
ログ出力用に使用している.
3.4 メモリマップ
3.4.1 OAKS16のメモリマップ
(1) 実行環境
0x00000 - 0x003ff SFR領域
0x00400 - 0x02bff 内臓 RAM,data_NE,data_NO,bss_NE,bss_NO
0xe0000 - 0xffdff 内蔵 ROM,program,rom_FE,rom_FO,data_NEI,
data_NOI
0xffe00 - 0xfffdb 内蔵 ROM,ハード,ソフト割込みベクタ領域 (vector)
0xfffdc - 0xfffff 内蔵 ROM,ハードCPU例外ベクタ領域(fvector)
3.4.2 OAKS16-MINIのメモリマップ
(1) 実行環境
0x00000 - 0x003ff SFR領域
0x00400 - 0x00bff 内臓 RAM,data_NE,data_NO,bss_NE,bss_NO
0xe0000 - 0xffdff 内蔵 ROM,program,rom_FE,rom_FO,data_NEI,
data_NOI
0xffe00 - 0xfffdb 内蔵 ROM,ハード,ソフト割込みベクタ領域 (vector)
0xfffdc - 0xfffff 内蔵 ROM,ハードCPU例外ベクタ領域(fvector)
4. 開発
4.1 開発環境の構築
開発環境は,Windows XP (Service Pack 3)で動作確認した.
構築環境はルネサスエレクトロニクス社製の開発環境を用いる.
ビルド管理方法として,以下の 2つがある.
(1) ルネサスエレクトロニクス社製の統合開発環境 TM を使用した環境
対象:OAKS16ボード,OAKS16-MINIボード
方式:ルネサスエレクトロニクス社の統合開発環境 TM V3.20 を用いて構築する.
その際,カーネル部をライブラリ化せず構築する
動作確認コンパイラ:
NC30WA Version 5.45 Release 1 無償評価版
NC30WA Version 5.10 Release 1 Entry版
注)2011年5月時点での最新版(NC30WA Version 6.00 Release 00) は
ツールの仕様変更により現時点では対応していない.
(2) DOS窓から make コマンドを用いて開発を行う環境
対象:OAKS16 ボード
方式:DOS窓からmakeを使って構築
カーネル部をライブラリ化して構築する
動作確認コンパイラ:
NC30WA Version 5.45 Release 1 無償評価版
その他必要ツール
GNU make (version 3.80 で動作確認済)
Perl (動作確認は Active Perl v5.6.1 及び v5.12.2で行った)
ただし,いずれの場合も NC30WA のインストール先には注意が必要である.
最近の版では規定値として C:\Program Files 以下にインストールされるが,
TM 及び make はパス文字列中に空白が含まれる場合,正しく動作しない.
そのため,インストール先パスが空白を含まないようにする必要がある.
また,ソースの展開位置とツールのインストール先とが異なるドライブに
配置されている構成も,正常に動作しない場合があるため,推奨しない.
4.2 統合開発環境TMを用いた構築
OAKS16 フルキットまたは OAKS16 MINI フルキットに添付の開発環境を用いて
M16C用の TOPPERS/JSP カーネルを構築する.実行は,FlashROM 書き込み
ツール FlashSta を用い,構築した MOT ファイルをボード上のフラッシュ
ROM へ書き込むことにより行う.
したがって,統合開発環境 TM,コンパイラ NC30WA,フラッシュROM 書き込み
ツール FlashSta もインストールする必要がある.
また,ターゲットプログラムの構築には,開発ホスト上で動作する,
コンフィギュレータ cfg/cfg.exe 及び M16Cターゲット特有のユーティリティ
プログラム utils/m16c-renesas/{m16cvec.exe, m16coffset.exe} も用いる.
これらのプログラムはコンパイル済みのものが用意されているが,
プログラムを変更したい場合は再構築する必要がある.
4.2.1 ツールの構築
cfg.exe の構築については user.txt などを参照のこと.
utils/m16c-renesas 上のツール m16coffset.exe と m16cvec.exe を
構築する場合,MinGW (Minimalist GNU for Windows)を使用する.
(ちなみに,cfg.exe のビルドも MinGW で対応可能である)
通常は既にコンパイル済みのものが用意されているため,そちらを
利用すればよい.
MinGW (Minimalist GNU for Windows)
http://www.mingw.org/
http://sourceforge.net/projects/mingw/ (インストーラの入手先)
4.2.2 TM にプロジェクトを選択しビルドする.
(1) プロジェクト設定ファイルの変更
注:場合によっては本節(1)の書き換えを行わなくてもツールがパスの設定を
自動的に行う場合があるため,問題が生じたときに書き換えを行えばよい.
tools/M16C-RENESAS 以下にある,TM のプロジェクト設定ファイル
Jsp14sample1.tmi,Jsp14sample1.tmk,Jsp14sample1m.tmi,Jsp14sample1m.tmk
の設定内容には絶対パス指定が行われている箇所がある.
その部分が現在の tools/M16C-RENESAS ディレクトリの絶対パスと異なる場合は,
TM を使ってプロジェクトの設定を行う前に,エディタを使って絶対パスの設定を
書き換える.以下にJsp14sample1.tmiとJsp14sample1.tmkの例を示す.
---Jsp14sample1.tmi ---
[PROJECT]
ProjectName=Jsp14sample1
WorkingDirectory=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS <-絶対パス
OutputDirectory=.
ProjectFile=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS\Jsp14sample1.tmk <-絶対パス
ProjectInfoFile=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS\Jsp14sample1.tmi <-絶対パス
TargetName=M16C Family
Type=1
GoalFile=C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS\Jsp14sample1.x30 <-絶対パス
[NC]
Name=NC30WA
Version=V.4.00 Release 2
:
---Jsp14sample1.tmk ---
####################################################################
# Makefile for TM V.3.20
# Copyright 1998-2002 MITSUBISHI ELECTRIC CORPORATION
# AND MITSUBISHI ELECTRIC SEMICONDUCTOR APPLICATION ENGINEERING CORPORATION
# All Rights Reserved.
#
# Notice : Don't edit.
# Date : 2004 01(January) 10(Saturday) PM.03.11
# Project : Jsp14sample1
####################################################################
DELETE = @-del
LNLIST = $(PROJECT).cmd
PRJDIR = C:\usr\TOPPERS\jsp-1.4\tools\R16C-RENESAS <-絶対パス
LMC = LMC30
CC = NC30
:
(2) プロジェクトのオープン
(2-1) Windows メニューから TM を起動する.
(2-2) TM が起動したら「Open Project」メニューを開く.
(2-3) tools/M16C-RENESAS ディレクトリ中の Jsp14sample1.tmk または
Jsp14sample1m.tmk を選択する.
OAKS16用の構築を行う場合は,Jsp14sample1.tmkを,OAKS16 MINI用の構築を
行う場合は,Jsp14sample1m.tmk を選択する.
(2-4) 選択時,コンパイラの違いにより設定メニューが表示される場合がある.
この環境は,NC30WA コンパイラの Version 5.10 Entry 版及び Version 5.45
にて評価を行っている.現在の環境にしたがって設定する.
(3) プリプロセッサの指定
ビルド過程でプリプロセッサを使用するため,開発環境がインストールされた
場所に応じて CPP という名前のマクロを変更する.
(3-1) TM から Project Editor を起動する.
(3-2) 表示されるウィンドウのメニューで「プロジェクト → マクロブラウザ」
を選択する.
(3-3) CPP という名前のマクロを,開発環境のインストール先に応じて編集する.
ここには cpp30.exe という実行ファイルのフルパス名を設定する.
(4) プロジェクトのビルド
(4-1) 設定後,「リビルド」メニューを選択しビルドを行う.
ビルドが完了すると,このディレクトリ中に Jsp14sample1.mot または
Jsp14sample1m.mot という名称のファイルが生成される.
TMの設定としてソースファイルの依存性の設定を行っていないので,
構築時は「リビルド」でビルドすることを推奨する.
4.2.3 FlashStaを用いてフラッシュROMに書き込む
開発用のパソコンとボードとを,RS-232Cケーブルを使って接続する.
CNVSS ピンをジャンパーピンを使ってショートさせる.
電源を接続し,電源スイッチをオンにする.そして FlashStaを起動する.
Select Programメニューにてポートを選択して「OK」ボタンを押下する.
ID Checkメニューが表示されたら「Refer..」ボタンを押下し,
生成したMOTファイルを選択する.
Select Program に戻ったら,「OK」ボタンを押下し M16C Flash Start
メニューが表示する.
まず,「Erase」ボタンを押下し,フラッシュROMをクリアする.
その後,「Program..」ボタンを押下しプログラムの書き込みを行う.
書き込みが終了したら,「Exit」ボタンを押下しFlashStaを終了させる.
電源を切り,CNVSSピンからジャンパーピンを外す.
4.2.4. sample1の実行
パソコンにシリアル・ターミナルを立ち上げる.
設定は以下の通り.
Baud rate:19200
Data:8 bit
Parity:none
Stop:1 bit
Flow controlはOAKS16 MINIではnone,OAKS16ではnoneでもXob/Xoffのどちらかに
設定すること.電源を入れると,sample1が実行される.
4.3 DOS窓からmakeコマンドを用いた構築
GNU make を用いてM16C用のTOPPERS/JSPを構築する方法を示す.
この方法は OAKS16 の場合のみ対応している.
コンパイラはライブラリアンを含む NC30WAの版を前提としている.
現在では,ルネサスエレクトロニクスのウェブサイトから無償評価版が入手可能である.
過去のコンパイラの Entry版ではライブラリアン lb30.exe が含まれないことが
あるため,そのままビルドすることが出来ない.その場合はライブラリ化
しないように Makefile (実際のファイル名は sample ディレクトリの
Makefile.m16c-oaks16 ) を書き換える必要がある.
構築にあたっては,コンフィギュレータ cfg.exe が cfg ディレクトリに,
4.2.1 で示したツール,すなわち m16coffset.exe および m16cvec.exe が
utils/m16c-renesas ディレクトリに,それぞれ存在していることが前提となる.
通常は用意されているものを利用すればよい.
また,開発ツール NC30WAはあらかじめインストールしておくことが必要である.
4.3.1 開発ツールの入手
ツールは以下のサイトから入手可能.
GNU Make
http://www.mingw.org/
Active Perl
http://www.activestate.com/
4.3.2 サンプルプログラムの構築方法について
サンプルプログラムの構築方法は基本的に doc/user.txt の 「7.4 サンプル
プログラムの構築」で示された方法に準拠している.ただし,コンフィギュレ
ーションスクリプト等の perl で書かれたスクリプトはそのまま Windows の
DOS窓(WindowsXPでは「コマンドプロンプト」)の上では使用することが
できない.そのため,utils/m16c-renesas ディレクトリに用意された,
専用の Perlスクリプトを使用する.
4.3.3 コンフィギュレーションスクリプトの実行
> mkdir OBJ
> cd OBJ
> perl ..\utils\m16c-renesas\configure.m16c
何も引数を指定しない場合は
-C m16c -S oaks16 -T renesas -p \perl\bin\perl
というオプションを指定して configure を実行した場合と同じ動作を行う.
この処理により,カレントディレクトリには以下のファイルが生成される
・Makefile
・サンプルプログラム用のコンフィギュレーションファイル(sample1.cfg)
・サンプルプログラム本体(sample1.hおよびsample1.c)
ここでMakefileの修正が必要ならば,修正を行うのは他のターゲットの場合と同じである.
4.3.4 依存関係ファイルの生成およびサンプルプログラムのロードモジュール作成
依存関係ファイル Makefile.depend およびロードモジュール jsp.mot を作成する
には次のように実行する.MinGW の make を利用する場合,make の代わりに
mingw32-make を実行する必要があるかもしれない.
> make depend
> make
make depend の実行過程においてプリプロセッサ(cpp30.exe)を用いるが,
ツールのインストール先に応じて,プリプロセッサコマンドのフルパス名を
適切に設定する必要がある.
設定はプロセッサ依存部ディレクトリ(config/m16c-renesas)にある Makefile.config
の中の CPP という変数で行っている.この部分をインストール場所に応じて書き換える.
4.3.5 フラッシュROM への書き込みおよびサンプルプログラムの実行
構築した MOTファイルを FlashSta コマンド用いて,ボード上のフラッシュROMに
書き込む手順から先は上記 4.2.3,4.2.4で説明した内容と同じである.
4.3.6 OAKS16-MINIの対応について
OAKS16-MINI 用のカーネルを構築する場合は,Makefile.m16c-oaks16_mini を
使用する.OAKS16-MINI版のカーネルでは,メモリサイズ削減の為に,
ログ機能はタスク化していない.そのため,コンフィギュレーション・ファイルを
修正する必要がある.sample1.cfg 中の28行目の
「#include "@(SRCDIR)/systask/logtask.cfg"」のの行を削除するか,
またはコメント化してログ機能がタスク化しないよう修正を行った後,ビルドする.
他の手順はOAKS16版と同様である.
4.4 デバッガ
OAKS16 および OAKS16-MINI には,KD30 デバッガが添付されている.
このデバッガはフラッシュ ROM 上の KD30 モニターと UART1 を用いて
通信を行いデバッグ機能を実現する.本カーネルはフラッシュROM 上に
書き込みを行い実行する.カーネルを書き込む際,既存のモニタープログラムを
上書きする為,カーネル実行時は KD30 デバッカは使用できない.
再び KD30 を使いたい場合は,KD30 付属のモニタプログラムをフラッシュ ROM
へ書き込む必要がある.
なお,本カーネルは TOPPERS 教育 WG で開発された「TOPPERS初級実装セミナー」
の教材に対応している.その為,教材で使用している「タスク・モニター」と
併用することにより,TOPPERS/JSP 実行中のメモリ及び SFR の参照や設定,
タスクの管理や状態表示が可能となる.必要な場合は「タスク・モニター」との
併用を勧める.
4.5 コンパイルスイッチ
以下のコンパイルスイッチの設定が可能である.
(1) NEED_API
コンパイル時,NEED_API をマクロ定義すると api.h が cpu_config.h にインクルード
される.これにより,ライブラリ化の為の分割コンパイルを抑止することができる.
(2) EXTERNAL_SOFT_HOOK
コンパイル時,EXTERNAL_SOFT_HOOKをマクロすると software_init_hook が
ターゲット依存部で定義されなくなる.従って,ユーザ側でsoftware_init_hook
の定義を与えることができる.
(3) MON
アセンブル時に値の定義を行う.通常は MON=0 として構築する.
MON=1 とするとタスク切り替え時にタスクモニタリング用の関数呼び出しを行う
ようになる.これは教育用のタスクモニタと併用する場合にこの設定を行う.
5. ファイル構成
5.1 ディレクトリ・ファイル構成
(1) config/m16c-renesas
api.h 非ライブラリ化時のAPI定義
cpu_config.c M16Cプロセッサ依存部の C 関数
cpu_config.h M16Cプロセッサ依存部の構成定義
cpu_context.h M16Cプロセッサ依存部のコンテキスト操作
cpu_defs.h M16Cプロセッサ依存部のアプリケーション用定義
cpu_insn.h M16Cプロセッサのアセンブリ inline 関数
cpu_rename.def カーネルの内部識別名のリネームとその解除の定義リスト
cpu_rename.h カーネルの内部識別名のリネームの定義
cpu_support.a30 M16Cプロセッサのアセンブリ関数
cpu_unrename.h カーネルの内部識別名のリネーム解除の定義
Makefile.config Makefile の M16C依存定義
makeoffset.c offset.inc 生成サポート関数
start.a30 スタートアップモジュール
tool_config.h M16Cプロセッサの開発環境依存モジュール定義
tool_defs.h M16Cプロセッサの開発環境依存定義
(2) config/m16c-renesas/oak16/
hw_serial.cfg SIOドライバのコンフィギュレーションファイル
hw_serial.h OAKS16用SIOドライバのヘッダファイル
hw_timer.h OAKS16用タイマ操作ルーチン
Makefile.config Makefile の OAKS16ボード依存定義
Makefile.kernel カーネルのファイル構成の定義(M16C用)
oaks16.h M30620FCAFPプロセッサの定義
sfr_uart.c OAKS16用SIOドライバのC関数
sfr_uart.h OAKS16用SIOドライバのヘッダファイル
sys_config.c OAKS16ボード依存部の C 関数
sys_config.h OAKS16ボード依存部の構成定義
sys_defs.h OAKS16ボード依存部のアプリケーション用定義
sys_rename.def カーネルの内部識別名のリネームとその解除の定義リスト
sys_rename.h カーネルの内部識別名のリネームの定義
sys_unrename.h カーネルの内部識別名のリネーム解除の定義
(3) config/m16c-renesas/oaks16_mini/
hw_serial.cfg SIOドライバのコンフィギュレーションファイル
hw_serial.h OAKS16-MINI用SIOドライバ
hw_timer.h OAKS16-MINI用タイマ操作ルーチン
Makefile.config Makefile の OAKS16-MINIボード依存定義
Makefile.kernel カーネルのファイル構成の定義(M16C用)
oaks16mini.h M30262F8FGプロセッサの定義
serial_mini.c 簡略型OAKS16-MINI用シリアルドライバー
sys_config.c OAKS16-MINIボード依存部の C 関数
sys_config.h OAKS18-MINIボード依存部の構成定義
sys_defs.h OAKS16-MINIボード依存部のアプリケーション用定義
sys_rename.def カーネルの内部識別名のリネームとその解除の定義リスト
sys_rename.h カーネルの内部識別名のリネームの定義
sys_unrename.h カーネルの内部識別名のリネーム解除の定義
syslog_mini.c 簡易型システムログプログラム
(4) sample/
Makefile.m16c-oaks16
ライブラリ型 OAKS16用JSP を構築するための make ファイル
(5) その他
tools/M16C-RENESAS/
utils/m16c-renesas/
これらについては,tools/M16C-RENESAS/README.txt を参照のこと.