H8/300Hモニタ h8mon Ver. 0.90 マニュアル

h8monはルネサステクノロジ製マイクロプロセッサ「H8/3069」用デバッグモニタです。

(NEW)Ver.0.90から「H8/3069Fネット対応マイコンLANボード(秋月電子通商)」でELFバイナリのプログラムをTFTPブートすることが出来ます。

以下のマイコンボードで動作を確認しています。

目次

1. h8monの特徴
2. 主な機能
3. コンソールモードでの使用法
4. モニタコマンド
5. 各コマンドの詳細
5.1 Lコマンド
5.2 Rコマンド
5.3 Gコマンド
5.4 Sコマンド
5.5 Bコマンド
5.6 Dコマンド
5.7 Mコマンド
5.8 Aコマンド
5.9 Fコマンド
5.10 callコマンド
5.11 memckコマンド
5.12 ipコマンド(Ver.0.90以降)
5.13 tftpbコマンド(Ver.0.90以降)
5.14 exelfコマンド(Ver.0.90以降)
5.15 resetコマンド
5.16 Vコマンド
5.17 Hコマンド
6. キー操作
7. モニタ上でのユーザプログラムの実行
8. gdb-stubモードで使用する場合
9. 仮想割り込みベクタ
10. ユーザプログラムの割り込みレベル
11. ソースのコンパイル方法
12. カスタマイズ
13. 作者

1. h8monの特徴

以下の2つの動作モードを持ち、用途に分けて使うことが出来ます。

動作モード 特徴
コンソールモード シリアル接続したターミナルからのコマンド入力で、対話的にデバッグできます。主にハードウェアデバッグに便利です。
gdb-stubモード gdb(GNU Debugger)からのリモート接続によりC言語のプルグラムをソースコードデバッグ出来ます。

2. 主な機能

3. コンソールモードでの使用法

H8/3069のSCI1とPCのRS232Cとを接続します。適当なターミナルソフトを以下の設定で使用します。

項目 設定値
ビットレート 115200bp
データ長 8ビット
パリティ 無し
ストップビット 1

電源投入後ターミナルソフトに以下のメッセージが表示されます。

H8/300(H) 3069F Monitor Ver. 0.90
(c)2011 Takashi SHUDO
Virtual vector table area : FFBF20 - FFC01F
Monitor used RAM area     : FFC020 - FFD179
Monitor stack end address : FFD30C
Build date                : 11:39:30 Apr 30 2011
>

4. モニタコマンド

以下のコマンドが使用出来ます。

コマンド 機能
l S-Recordデータのロード
r レジスタの表示、変更
g プログラムの実行
s プログラムのステップ実行
b ブレークポイントの設定、削除
d メモリのダンプ表示
m メモリの表示、書き込み
a 逆アセンブル
f 指定メモリ範囲の書き込み
call プログラムの呼び出し
memck メモリのチェック
ip IPアドレス設定(Ver.0.90以降)
tftpb ソフトウェアのTFTPブート(Ver.0.90以降)
exelf メモリ上のELFバイナリのロードと実行(Ver.0.90以降)
reset リセット実行
v バージョン表示
h ヘルプメッセージの表示

5. 各コマンドの詳細

各コマンドの【表記】の[]内は省略可能なコマンド引数です。<>内は省略出来ないコマンド引数です。

5.1 Lコマンド

【表記】

l [x] [v]

【機能】

S-Recordデータをメモリへロードします。

Please send S-records data.

のメッセージが表示されたら、ターミナルソフトのファイル送信機能を使用してS-Recordデータを送信してください。

引数に x を指定すると受信時にX-Flowを使用します。S-Recordを受信中に

SCI Receive buffer full.

のメッセージが表示される場合にこのオプションを使用してください。このオプションを使用するときはターミナルソフトのX-FlowをOnにしてください。

引数に v を指定するとS-Recordデータとメモリ内容のベリファイチェックを行います。

5.2 Rコマンド

【表記】

r [[reg] val]

【機能】

レジスタの表示編集を行います。regを省略した場合、全てのレジスタの値を表示します。

例)

>r
PC = 400000      CCR = 80
R0 = 00000000    R1 = 00000000   R2 = 00000000   R3 = 00000000
R4 = 00000000    R5 = 00000000   R6 = 00000000   R7 = 00FFFF20
>

レジスタ名([reg])を指定した場合、指定したレジスタの値を表示します。

例)

>r pc
PC = 00400000
>

レジスタ名([reg])の後に値を16進数で指定([val])した場合、指定レジスタに値を設定します。

例)

>r r0 100
R0 = 00000100
>

5.3 Gコマンド

【表記】

g [address]

【機能】

プログラムを実行します。addressを指定した場合addressから実行します。

5.4 Sコマンド

【表記】

s

【機能】

プログラムを1マシン命令実行します。

5.5 Bコマンド

【表記】

b [[address]|[- address]]

【機能】

ブレークポイントを設定、削除または現在の設定を表示します。

(1) ブレークポイントの設定

引数にアドレスに対し、ブレークポイントを設定します。

(2) ブレークポイントの削除

引数に"- address"を指定した場合、指定アドレスのブレークポイントを削除します。

(3) 設定されているブレークポイントの表示

addressを指定しなければ現在設定されているブレークポイン示します。

例)

>b fff000
Set breakpoint at FFF000
>b
1 : FFF000
>b - fff000
Deleted breakpoint address FFF000.
>

5.6 Dコマンド

【表記】

d [start [end]]

【機能】

startからendまでのメモリ内用をダンプ表示します。endを省略した場合startから256バイト分表示します。

例)0x1000番地から0x107f番地をダンプ表示します。

>d 1000 107f
001000 : 00 FF C2 E4 8A 02 6E EA  FF F3 79 05 00 02 40 1A   "......n...y...@."
001010 : 6F 63 FF F0 1B D3 58 70  00 F6 01 00 6F 40 00 08   "oc....Xp....o@.."
001020 : FA 03 6E EA FF F3 79 05  00 03 5E 00 30 A4 01 00   "..n...y.....0..."
001030 : 6B A0 00 FF C2 E0 6F 63  FF F0 1D 53 58 F0 00 D0   "k.....oc...SX..."
001040 : 6E 6A FF F3 17 52 6F E2  FF EE 1D 23 58 F0 01 A0   "nj...Ro....#X..."
001050 : 1A D5 6E 6D FF F3 10 35  10 35 0A C5 1A B3 01 00   "..nm...5.5......"
001060 : 6F E3 FF F4 6A 2A 00 FF  C2 E4 AA 01 47 2E 45 06   "o...j*......G.E."
001070 : AA 02 46 74 40 4C 01 00  6B 24 00 FF C2 E0 01 00   "..Ft@L..k$......"
>

5.7 Mコマンド

【表記】

m [-b|w|l] [address] [value ...]

【機能】

valueを指定しなければaddressのメモリ内容を表示します。valueを指定した場合はaddressのアドレスにvalueを書き込みます。-bまたはオプションを指定しなければバイトサイズで書き込みます。-wでワードサイズ(2バイト)、-lでロングワードサイズ(4バイト)で書き込みます。valueは複数個指定出来ます。(最大9個)

5.8 Aコマンド

【表記】

a [address [end]]

【機能】

addressからendまでのメモリを逆アセンブル表示します。

例) 0x100番地のメモリを逆アセンブルします。

>a 100
000100 : 01 00 6D F6                   mov.l    er6,@-er70
000104 : 0F F6                         mov.l    er7,er6
000106 : 1B 97                         subs     #4      er7
000108 : 6A 2A 00 FE E0 19             mov.b    @#0xfee019:24,r2l
00010E : CA 0C                         or.b     #0x0c:8,r2l
000110 : 6A AA 00 FE E0 19             mov.b    r2l,@#0xfee019:24
000116 : 6A 2A 00 FE E0 12             mov.b    @#0xfee012:24,r2l
00011C : EA F7                         and.b    #0xf7:8,r2l
00011E : 6A AA 00 FE E0 12             mov.b    r2l,@#0xfee012:24
000124 : FB FF                         mov.b    #0xff:8,r3l
000126 : 6A AB 00 FE E0 00             mov.b    r3l,@#0xfee000:24
00012C : FA 07                         mov.b    #0x07:8,r2l
00012E : 6A AA 00 FE E0 01             mov.b    r2l,@#0xfee001:24
>a

5.9 Fコマンド

【表記】

f <address> <end|@length> <value>

【機能】

addressからendまでのメモリにvalueを書き込みます。またはaddressから @length 分のメモリにvalueを書き込みます。

5.10 callコマンド

【表記】

c [address]

【機能】

addressのプログラムを呼び出します。gコマンドと異なり、address番地のプログラムはJSR命令でコールされます。よってaddressのプログラムはRTS命令でモニタコンソールに戻ることができます。ただし、ブレーク停止後に続きを実行することはできません。

5.11 memckコマンド

【表記】

memck [Start [End]]

【機能】

DRAMメモリにインクリメントデータを書き込みべりファイチェックします。[Start],[End]を指定した場合、[Start]アドレスから[End]アドレスまでチェックします。

例)

>memck
Memory check.
Start  : 400000
End    : 5FFFFF
Writing 00000000...
Checking...OK.
Writing FFFFFFFF...
Checking...OK.
Writing AAAAAAAA...
Checking...OK.
Writing 55555555...
Checking...OK.
Writing address data...
Checking...OK.
Writing invert address data...
Checking...OK.
Writing 55AA55AA...
Checking...OK.
Writing 00FF00FF...
Checking...OK.
Writing 00000000...
Checking...OK.
>

5.12 ipコマンド(Ver.0.90以降)

【表記】

ip [IP Address]

【機能】

IPアドレスを設定し、LANを有効にします。LANが有効な状態ではping応答を返すことができます。

LANが有効な状態で[IP Address]を省略すると現在設定されているIPアドレスを表示します。

例)

>ip 192.168.1.123
IP address : 192.168.1.123
RTL8019AS Initialized
MAC : 00:02:cb:01:64:bf
Start network
>ip
IP address : 192.168.1.123
>

5.13 tftpbコマンド(Ver.0.90以降)

【表記】

tftpb [-d] <IP Address> <filename> [Address]

【機能】

ELFバイナリをTFTPダウンロードし実行します。<IP Address>には実行するELFバイナリのあるサーバアドレスを指定します。<filename>には実行するELFバイナリのファイル名をしています。

この機能を使用する前にかならず「ipコマンド」でIPアドレスを設定しておく必要があります。

[Address]を指定した場合、ELFバイナリは[Address]のメモリアドレスにダウンロードされます。よって、[Address]は実行するELFバイナリと重ならないアドレスを指定する必要があります。[Address]を省略した場合0x500000番地にダウンロードされます。

[-d]を指定した場合、ELFバイナリをダウンロードするだけで、プログラムの実行はしません。

例)

>tftpb 192.168.1.3 test
TFTP boot
Target IP : 192.168.1.3
File name : test
Load Addr : 500000
Start
Port 60990
................................................................................
................................................................................
................................................................................
............................................
Done
Receive size = 145084
Load : 00400000 - 00400583 (00000584)
Load : 005D1000 - 005F3B62 (00022B63)
Load : 005FC000 - 005FC009 (0000000A)
Load : 00FFBF20 - 00FFBF23 (00000004)
Entry address = 5D1000

5.14 exelfコマンド(Ver.0.90以降)

【表記】

exelf [Address]

【機能】

[Address]番地にあるELFバイナリを実行します。[Address]を省略した場合、0x500000番地にELFバイナリがあるものとしてELFバイナリのデコードと実行を試みます。

ELFバイナリの実行アドレスは[Address]と重ならないアドレスでなければなりません。

下記の例では0x5D1000番地が実行(エントリー)アドレスのELFバイナリが0x500000番地に書き込まれている場合の動作です。

例)

>exelf 500000
ELF bin address = 500000
Load : 00400000 - 00400583 (00000584)
Load : 005D1000 - 005F3B62 (00022B63)
Load : 005FC000 - 005FC009 (0000000A)
Load : 00FFBF20 - 00FFBF23 (00000004)
Entry address = 5D1000

5.15 resetコマンド

【表記】

reset

【機能】

CPUをウォッチドッグタイマ(WDT)でリセットします。h8monが再起動されます。

5.16 Vコマンド

【表記】

v

【機能】

h8monのバージョンを表示します。

5.17 Hコマンド

【表記】

h

【機能】

コマンドの表記を表示します。

6. キー操作

コンソールモードではbashライクなコントロールキー操作ができます。コマンドヒストリが使えます。(TeraTerm等のVT100互換のターミナルソフトでの使用を推奨します。)

7. モニタ上でのユーザプログラムの実行

モニタ起動時のメッセージに表示される

Virtual vector table area : FFBF20 - FFC01F(仮想割り込みベクタ)
Monitor used RAM area     : FFC020 - FFC179(モニタワーク)
Monitor stack end address : FFD30C(モニタスタックエリア)

は、モニタのワークエリアを示しています。ユーザプログラムはこれらのエリアを破壊しないようにしてください。これらのエリアが破壊された場合、モニタは正常に動作できなくなります。

8. gdb-stubモードで使用する場合

http://www.shudoshiki.net/electronics/で公開されているgdbで、H8/3069のソフトウェアをリモート接続によるソースコードデバッグが出来ます。

gdb-stubモードで使用する場合は、gdbがインストールされているPCとH8/3069のSCI0と接続します。(コンソールモードのSCI1とは異なります。)

デバッグ対象のソフトウェアがあるPCのホームディレクトリ、またはカレントディレクトリに以下の内容で.gdbinitファイルを作成します。

set architecture h8300h
set remotebaud 115200
set remoteaddresssize 24
target remote /dev/ttyS1

接続するPCのRS232Cポートにあわせて以下の部分を修正します。

target extended-remote /dev/ttyS1

cygwin環境のgdbを使用する場合、COM1が/dev/ttyS0、COM2が/dev/ttyS1に相当します。

これらの準備が出来たら、以下のコマンドでgdbを起動します。

$ h8300-elf-gdb <デバッグ対象ファイル>

9. 仮想割り込みベクタ

仮想割り込みベクタテーブル機能があります。割り込みハンドラは通常の割り込み処理と同様にRTEで終了するようにプログラムしてください。

「リセット」割り込みと、モニタで使用している「SCI0」、「SCI1」、「TRAPA#2」、「TRAPA#3」割り込み以外はユーザの割り込みベクタを動作させることが可能です。

モニタのLコマンドまたはgdbによる0x000000 - 0x0000ff番地へのロードは仮想ベクタテーブルへ転送されます。よって、ベクタテーブルのセクションはROM化する場合と同様のマップ配置が可能です。

ただし、コンソールモードのmコマンドでベクタテーブル領域を表示した場合、表示/編集されるのは実際のメモリ内容(本プログラムベクタテーブル内容)です。

10. ユーザプログラムの割り込みレベル

モニタで使用するSCIは割り込みレベルを1にしています。割り込みハンドラでブレーク、ステップ実行を行う場合は割り込みレベルを0にして下さい。

【注意】

ユーザ割り込み処理の割り込みレベルを1に設定すると、モニタがコマンド入力待ち状態でも割り込みハンドラが実行されてしまいます。その場合、割り込みルーチンにブレークポイントを設定すると正常に動作しません。

11. ソースのコンパイル方法

http://www.shudoshiki.net/electronics/で公開しているH8クロスコンパイラが必要です。ソースアーカイブ解凍後、

$ make depend
$ make

でコンパイルしてください。

h83069mon-*.mot

ファイルをフラッシュROMに書き込んでください。

12. カスタマイズ

ソースのconfig.hを編集することで、モニタをカスタマイズすることが出来ます。以下のマクロの値が変更できます。

USE_NET (Ver.0.90以降)

定義されている場合、ネットワーク、TFTPブート、ELFバイナリ実行機能を有効にします。ip,tftpb,exelfコマンドが使用できるようになります。

この機能が使用できるボードは「H8/3069Fネット対応マイコンLANボード(秋月電子通商)」です。

MAX_COM_HIS

コマンドヒストリの数を指定します。

MAX_LINE_COLUMS

1行で編集できる最大文字数を指定します。

MAX_BREAKPOINT_NUM

設定できるブレークポイント数を指定します。

13. 作者

Takashi SHUDO(shudo@mbe.nifty.com)