メインページへ

H8/3052Fモード7用モニタデバッガ生成メモ

H8/3052Fのデバッグ環境は、Renesasのウェブサイトからダウンロードできるモニタデバッガを 使用することで無料で簡単に構築することができます。
ここでは外部RAM空間を使用しないモード7で動作させるためのモニタデバッガ・ファームウェアを生成します。

注意:ここで示す方法では、試用期間が終わっているコンパイラではビルドできません。
また、モニタデバッガの書き込み、よおび動作確認用のサンプルの実行は、AKI-H8マイコン専用マザーボード(秋月電子様販売) を使用することを前提に考えています。書き込み時のブートモードにする設定などはAKI-H8マイコンおよびマザーボードの説明書 もあわせて参照してください。

記 2009/6/14

必要なファイルと入手先を以下に示します。
Cコンパイラと統合開発環境 <H8SX, H8S, H8ファミリ用C/C++コンパイラパッケージ High-Performance Embedded Workshopおよびシミュレータデバッガを同梱>の試用版。
試用期限(60日)を過ぎるとリンクサイズが64Kバイト以内に制限されますが、ホビーユースでは 困らないくらいの制限だと思います。
入手先:評価版ソフトダウンロード
モニタデバッガ と
デバッグ用ターミナルソフト
 CPU内のEEPROMにデバッグ対象プログラムを書き込まずにデバッグを行うためのツール。
 モニタデバッガと専用のターミナルソフト、Renesas純正のCコンパイラを使用することにより、C言語ソースレベル デバッグが可能になります。
入手先:H8/300Hシリーズのページ から、<”関連リンク”の中から”サンプルプログラム”をクリック>→<同意画面>→<H8/300HシリーズH8/300H Tinyシリーズ> の中にあります。モニタプログラムはHEWのバージョンに合ったものを選択してください。
書き込みツール AKI-H8マイコンボードを開発キットで購入した場合には書き込みツールが付属しているものがありますので これで十分です。
書き込みツールがない場合にはRenesasの書き込みツール(Flash Development Toolkit)をダウンロードして使用します。 入手先はコンパイラと同じところです。


ダウンロードしたモニタデバッガのファイルは自己解凍型の実行ファイル(2009.6.14現在"300hhew3.exe")です。これを 実行するとc:\300h(デフォルトの解凍フォルダ)フォルダが作成されてこの中に解凍されます。
HEWを起動してメニューの ファイル(F)→ワークスペースを開く(R) で、このフォルダの中にあるmonitor.hwsを開く ことにより、ワークスペースとして開くことができます。(いくつかメッセージが表示されますがこれには"OK"、"はい" ボタンで応答します。)

c:\300hフォルダの中には"readme.htm"というファイルがあり、CPUに合ったコードの修正方法が記述されています。 この内容に沿って修正することにより希望するモニタデバッガの実行ファイルをビルドすることができます。



以下の手順で修正を行いファームウェアを生成します。
  1. C言語によるユーザイニシャライズモジュール(monitor.c)の修正
  2. リンケージサブコマンドファイル(monitor.sub)の修正
  3. printf関数、scanf関数のサポート 対応

1.C言語によるユーザイニシャライズモジュール(monitor.c)の修正

monitor.cで記述されているヘッダーファイルを"3003.h"から"3052s"に変更します。
プロジェクトウインドウのDependenciesフォルダに表示されるファイル名は自動的に変更されます。 モード7のmonitor.c

2.リンケージサブコマンドファイル(monitor.sub)の修正

以下の条件で動作するための修正を下図の赤枠で示します。
使用CPU:H8/3052F 動作モードモード7 動作周波数:25MHz モニタ使用SCIチャネル:1 38400bps
また、printf関数、scanf関数を使用するための修正を緑枠で示します。 モード7のmonitor.sub

ここまでの修正後、ビルドを行ってロードモジュールを生成します。出来上がった MONITOR.MOT をH8に書き込むと モニタデバッガを使用することができます。
インストールしたターミナルソフト(Hterm)を起動後、H8基板をモード7で起動すると以下のようにメッセージが表示されて モニタデバッガを使用することができるようになります。 モード7のhterm

3.printf関数、scanf関数のサポート 対応

組み込み型モニタがサポートするprintf関数とscanf関数をユーザプログラムから使用する場合、使用する ソースコードに以下のマクロを記述する必要があります。

#define printf ((int (*)(const char *,...))0x????????)
#define scanf ((int (*)(const char *,...))0x????????)

????????の部分には組み込み型モニタと共にリンケージされたprintf関数とscanf関数のアドレスを記述します。
このアドレスは手順2までの修正後、ビルドを行ったときに作成される"MONITOR.MAP"ファイルの中に記述されています。
	FILE=_printf
	                                  00002b34  00002b85        52
	  __printf_lite
	                                  00002b34        52   func ,g         * 
	FILE=_scanf
	                                  00002b86  00002bd7        52
	  __scanf_lite
	                                  00002b86        52   func ,g         * 
	

上記のようになっていたので、マクロは以下のようになります。
#define printf ((int (*)(const char *,...))0x00002b34)
#define scanf ((int (*)(const char *,...))0x00002b86)

筆者は、このコードをヘッダファイルにして必要に応じてインクルードして使うようにしています。

*.動作確認用のサンプルプログラム

モニタデバッガは仮想ベクタ方式を採用しているため、モニタデバッガ上で動作させるプログラムも仮想ベクタに対応している 必要があります。HEWが自動生成するワークスペースでは仮想ベクタに対応していないため、何らかの対応が必要になります。
筆者の場合以下のように対応しています。
  1. "intprg.c","resetprg.c"ファイルのコードからvectパラメタを削除し、ベクタ番号がこのファイル内で 定義されないようにします。実際にはあらかじめ用意した差し替え用のファイルと置き換えるようにしています。
  2. ベクタテーブルをアセンブラで記述した"vect.inc","vecttbl.src"ファイルをHEWが生成したワークスペースフォルダに 追加した後、プロジェクトにもAddFile で追加します。
  3. メニューの ビルド(B) から H8S,H8/300S tandard Toolchain を選択し、H8S,H8/300S tandard Toolchainダイアログを 表示します。ダイアログの”最適化リンカ”タブの カテゴリ(Y) で”セクション”を選択して、セクションのアドレスを 以下のように変更します。 モード7のmonitor.c
上記手順の後ビルドを実行して生成された実行ファイルは仮想ベクタに対応したものとなりますので、モニタデバッガの ロードコマンドでロードし、実行させることができます。
仮想ベクタ用ファイル


仮想ベクタに対応したサンプルプロジェクトをここで公開します。
このサンプルプロジェクトは、秋月電子のAKI-H8/3052Fマイコンボードをマザーボードに搭載したものを対象としています。
このサンプルプログラムは以下のように動作します。
  • ITUのタイマ0、GRAのコンペアマッチを使用して、起動直後から1秒ごとにLED2を点灯、消灯します。
  • SW1を押している間、LED1が点灯する。
  • SW3を押すごとにモニタデバッガの画面に"abcdef"がprintfによって表示される。
  • SW4を押すごとにモニタデバッガの画面に"123456"がprintfによって表示される。