HTERM]ここにリンクを貼っておこう。トラックバック(0)H8マイコンにデバックモニタを入れる。HTERM]前回の続きです。実際にデバックモニタを使った開発を”簡単”に解説します。HEWを起動して、新たにワークスペースを作成しても良いのですが、関連と言う事で前に作成したsampleワークスペースの中に新たにプロジェクトを作成して、そこにアプリケーションを構築しましょう。sampleワークスペースを開いてください。次にファイルメニューの「プロジェクト(P)」→「プロジェクトの挿入(I)」でウイザードを起動し、「新規プロジェクト」を選択して先に進みます。ここから先は最初にワークスペースを生成した手順と同じになりますので、差分だけ以下に紹介します。今回はHEAPメモリを使いませんので、チェックを外して置きます。stdio.hを組み込みたい所ですが、ここはぐっと堪えて。割り込みを使用しないので、割り込みベクターのチェックは外して置きます。ウイザードが最後まで完了したら、追加したプロジェクトファイル名.cと、先に作成したデバックモニタのMAP出力(作成したデバックモニタのReleaseフォルダーにある)を編集画面に開きます。あとは「組み込みモニタのカスタマイズ方法」と同じ様にマクロをCソースに書き込みます。図ではprintfは0x2706番地から、scanfは0x273a番地から開始している事が判ります。実に簡単なプログラムなので、図を見てこの通りに入力してください。左のペインの「dbsct.c」に赤いバッテンが付いています。dbsct.cの上にマウスカーソルを持って行って、右クリックから「ビルドからの除外」を選べばこの様になりますので、除外しておきます。さあ!これでビルドだ!とは行きません。次はセクションの設定を行います。Toolchain...」でツールチェインのダイアログを開き、「最適化リンカ」のTABを開いて各項目を設定します。エントリーポイントにチェックを入れて、”_main”と記述します。これはmain関数の事を指し、main関数の先頭アドレスのラベルを入力しています。ROM→RAMコピーを行わないので、ハイライトしている項目を選び、DセクションからRセクションへのコピーの項目を削除してしまいます。「セクション」の項目です。右の並びのボタンを使って編集や削除を行い、図の様に設定します。最終的にはPセクションとCセクションだけになってしまいますが、これは先のプログラムがPセクション(コード)、Cセクション(文字定数)しか使わないからです。Pセクションの開始アドレスは、後ほど解説しますが、デバックモニタの”?”コマンドで出力したメモリマッピング情報のUSER領域の開始アドレスを示しています。設定が完了したらビルドを行ってください。最初のビルドは少し時間が掛かります。エラーや警告が発生していなければ終了です。話が長くなったので、ここからは飛ばして解説します。デバックモニタが書かれたターゲットと、HTERMを起動します。デバックモニタのクレジットを確認したら”?”コマンドを打って下さい。Vectorの項目に着目します。本来はここは本当にユーザーの定義した割り込みベクターの配置アドレスなのですが、今回は一切割り込みを使用していないので、ここのアドレスにプログラムを転送する事とします。次にF9ボタンで先にビルドしたロードモジュールを読み込みます。Debugフォルダー以下に出来ている、拡張子がabsのファイルです。読み込みが完了すれば、読み込み開始アドレスと終了アドレスが表示されています。F5ボタンを押すと関数mainから実行が開始されます。ロードモジュールを読み込んだ時にこの図の様なWindowも開いたと思いますが、この画面上でデバックが可能です。画面の左端をダブルクリックするとブレークポイントを設定できます。黄色くハイライトされている行がPC(プログラムカウンタ)が示す行です。ステップ実行すれば一行づつ進みます。ご存知かと思いますが、ユーザーアプリケーションの転送はRAMに行われますので、一度電源を落としてしまうと再ロードが必要です。ROMを使わないので幾らでも書き換えが可能です。逆にRAMの容量の上限がユーザープログラムで作成できるサイズの上限でもあります。H8/TinyのRAM容量ではかなり苦しいですね。普通、マイコンの開発では標準入出力がありません。stdioの中の標準入出力を利用する関数を実際に動くようにするには、ユーザー側でそれを実現してやる必要があります。デバックモニタ上で動かす場合、既にデバックモニタが入出力のインタフェースとしてSCIを利用しているので、ここを標準入出力として使いましょう!と言うのが「組み込み型モニタのカスタマイズ」htmファイルの趣旨なのです。デバック完了してオリジナルのアプリケーションをROM化する時は、自分で標準入出力を実現する必要があります。詳細はC/C++コンパイラマニュアルに書かれていますので、ご一読ください。トラックバック(0)H8マイコンにデバックモニタを入れる。HTERMでデバックをする。HTERM]H8をHTERMでデバックする手順に付いて質問を受けたので、あらためてここで紹介します。手順の説明を開始する前に、HTERMでのデバックの概要について簡単に書いておきます。H8/300Hマイコンの内、後発のH8/Tinyシリーズについては設計段階からオンチップデバック機能を搭載しており、E8エミュレーターを使ってデバックが出来る事は前に紹介しました。その前からあるH8/300Hマイコン、一般的なのはH8/3048F、H8/3052F、H8/3069Fにはチップ内部にオンチップデバック機構を持ちません。これらマイコンにはハードウエア的なデバック機能が無いので、ルネサスのセミナー講師であるKさんがソフトウエアによるデバック機能を実現しました。インタフェースにはSCIを使用します。(複数SCIがある時はブートモードで使用するSCIがデフォルトで選ばれている。)確か1995年位ではなかったでしょうか、当時の日立、現在のルネサスの半導体セミナー(無償セミナーの方)でデバックモニタの実現方法に付いて講習を行っていました。当時インターネットはまだ十分に普及しておらず、サポート用にniftyのメールアドレスをもらっています。当初はデバックモニタのみのリリースでしたが、後にこのデバックモニタの機能を使いこなすべく、GUIで操作できるHTERMを当を本人が開発され、現在ではデバックモニタ、HTERM共に上記写真のページ(ルネサスの半導体セミナーのページからサンプルプログラムに進む)で提供されています。デバックモニタにしろ、HTERMにしろ、GCCで作成したモジュールを扱う事もできますが、特にHTERMの機能を十分に使いこなせないので、開発はルネサス純正のツールチェインを使った方が良いでしょう。Hterm」をダウンロードしてください。※300hhew3.exe、300thew3.exeは実行形式のファイルなので、場合によってはセキュリティソフトに文句を言われるかもしれませんね。ダウンロード後、適当なフォルダで自動解凍を行います。すると、Opera上に自動的に「組み込みモニタのカスタマイズ方法」と言うページが開きました。なーんだ、解説要らないジャン。※下手な解説読むより、作った本人の解説があれば、そっちを読んだ方が良いのは言うまでもないですよね。それでも判らない事が有ればコメント欄へどうぞ。言う訳でまずは展開されたreadme.htmを読んでください。同じ事を解説しても無駄ですから。あとmonitor.htmの方も読んでおくと良いでしょう。※できれば「printf関数、scanf関数のサポート」を読んで、これら機能を一緒に組み込んで置くとお得です。ダブった事は書いてもしょうがないので、マイコンに依存する所のみ紹介して置きます。※特にROM容量をケチる必要も無いので、「組み込み型モニタの機能選択」は行わず、フル機能で構築しています。※ボーレートの設定値ですが、使用するマイコンのデータシートのSCIのBRRの項目に、親切にも計算済みの値が書いてありますので、それを使ってください。例1.H8/3069Fマイコンの場合。秋月の3069FLANボードを想定。CPUクロック20MHz、DRAM16Mbit、ボーレート38400bps、printf、scanfの実現有り。*;************************************************************************_INITIALIZE:;DRAM空間はCS2に取られている。PAGE、EDOドンと来い設定。VECTOR/0,ROM,C/100,RAM/0FFBF20,USER/0FFBFF4,SCI/0FFFFB8例2.H8/3048Fマイコンの場合。CPUクロック16MHz、外部メモリ無し、ボーレート38400bps、printf、scanfの実現有り。※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。※3048Fに付いては、いま動かせる基板が無いので動作未確認。Tinyマイコンの場合。CPUクロック20MHz、ボーレート38400bps、printf、scanfの実現有り。※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。VECTOR/0,ROM,C/100,RAM/F780,USER/F880,SCI/FFA8※以下のSUBファイルの記述は修正が入っています。VECTOR/0,ROM,C/100,RAM/F780,USER/F880,SCI/FFA8USER/F840→USER/F880MOTファイルが出来上がったらFDTでターゲットに書き込みます。※HTERM自体にも書き込み機能が有るのですが、H8/3069F以外は自前で書き込みモジュールを用意する必要があります。書き込みモジュールの作り方も何処かにドキュメントが有った筈なんだけれど。書き込みが完了したらFDTとターゲットとの接続を解除し、HTERMを立ち上げて(COMポート番号とボーレートには注意して)コンソールを開きます。ターゲットの動作モードをブートモードから通常の動作モードに切り替えて、電源の再投入かリセットを実行します。以下の画面が表示されればデバックモニタの構築は完了です。トラックバック(0)H8でLEDチカチカ、、、まずはここからですね。HTERM]前回はウイザードを使ってプロジェクトを作成するところまで行いました。今度はLEDチカチカのプログラムを記述し、FDTでH8マイコンに書き込んで動かしてみるところまでやります。HEWのエディタ画面にsample.cを開き、関数mainの中にLEDチカチカのプログラムを記述します。簡単なプログラムであり、画面に写っているコードが全てです。記述したらビルドを行います。ファイルメニューの「ビルド(B)」→「ビルド(B)」でこのプログラムを含む全体の構成ファイルがビルドされ、最終的にH8マイコンに書き込むsample.motが出来上がります。※Warinigが出ていますが気にしないで下さい。次に出来上がったsample.motをH8マイコンに書き込む為、FDTを起動してください。※H8マイコンとはUSB/シリアルで接続しています。今回はCOM9になっています。実際に使用するCOMポート番号は事前にデバイスマネージャー等で調べておきます。FDTを起動するとこのダイアログが開きますので、「新規プロジェクトワークスペースの作成」を選択してOKします。2回目からは、下の2つのチェックマークのどちらかを選んで進みます。ワークスペース名やワークスペースの保存先等を適当に書き込んでOKします。今回はH8/3694Fを使用します。使用するCOMポートを選択します。H8マイコンに入力されているクロックの周波数を設定します。マイコンは大概マイコン内部にCPUクロックの発振メカニズムを持っていますので、外部にクロックが必要と言うこう言った所にH8マイコンの設計の古さを感じてしまいます。最初の設計は20年前位じゃあなかったっけ?。Modeを選択してOKします。ここもデフォルトのままで「完了」ボタンをクリックします。手数は多いですが別に難しくは無いですね。ファイルメニューから「FILE(F)」→「データファイルを開く(L)」で先程作成したsample.motを読み出します。読み出しが完了すると右のペインにダンプリストが表示されます。「デバイス(D)」→「デバイスとの接続(C)」でH8マイコンとの通信を開始し、H8/3649Fの場合は書き込みプログラムがマイコンに転送されます。Modeで起動するように設定しておきます。手順は、ポート8のbit5(P85端子)をHi、NMI(NMI端子)をLoにした状態で電源を投入(またはリセット)します。「デバイス(D)」→「対象ファイルのダウンロード(L)」でH8マイコンに先のsample.motの転送を行います。成功すると図の様になります。成功したならば、接続を解除します。「デバイス(D)」→「デバイスとの切断(D)」で行います。※もし失敗して書き直しが必要な時は、電源の再投入からやり直してください。ポート8のbit0に図の様にLEDを接続します。私のところでは高輝度タイプのLEDを使用したので電流制限抵抗が大きめですが、実際に使用するLEDに合わせて抵抗値を加減する必要があります。※このH8評価基板には初めから基板上にLEDが実装されています!。冒頭の写真の基板の右上辺りで光っているLEDがそれです。Chipマイコンではシンク(引き込み)もソース(吐き出し)もLEDを駆動するには十分な能力が、しかも全ポートに備わっている物も多いのですが、H8マイコンではLEDを直接駆動できるポートは限られてしまいます。シンクは10mAとか20mAとか引き込めるのですが、ソースは根性無しです。言った所にも設計の古さを感じてしまいますね。「C言語でH8マイコンを使いこなす」は是非ご一読頂きたい本です。トラックバック(0)H8開発環境HEWのウイザードを使ってプロジェクトを作成する。構成ファイルを眺めてみる。HTERM]まずは、プロジェクトの生成ウイザードを簡単に解説して行きます。HEWを起動した時に出るダイアログボックスからウイザードを起動して新規にプロジェクトを作成する事ができます。ワークスペース名やプロジェクト名、CPU種別等を設定するダイアログです。ワークスペース名は適当にsampleとしました。CPU種別はH8/300H、ツールチェインはやはりH8/300H用を使用します。ツールチェインバージョン、CPUシリーズ、CPUを選択して行きます。今回使用するのはH8/Tinyシリーズの3694Fです。このマイコンはH8/300Hのコアを搭載し、Normalモード(アドレス範囲が64K以下)で動きます。この画面では特に選択しないで先に進みます。※ちら!っと見えている「引数格納レジスタを2つから3つに変更」と言うのもなかなか面白いオプションですが。HEAPメモリはmalloc等を使う時に必要となります。動的にメモリを確保しないのならば、ここのチェックは外した方が良いでしょう。使用したい標準ライブラリにチェックを入れて置きます。いまここで入れなくても、後ほど追加、削除も出来ます。リセットスタート時にスタックポインタを設定しますが、その時の値とトータルのスタック使用サイズを指定します。H8/3694FのRAM領域はデータシートから0xF780~0xFF7Fの2Kbyteとなっていますので、この値はSRAMの底を指定している事となります。※SRAMの最後だから”0xFF7F”とはなりません。2”してからそのアドレスに値が代入されるからです。スタックポインタは必ず2byte境界である必要があります。ここはチェックを入れたまま先に進みます。HEW付属のシミュレーターを使う場合はここにチェックを入れて先に進みます。シミュレーターを使わない場合はチェックを入れずに完了ボタンをクリックします。※画面はチェックを入れてしまっていますが、今回はシミュレーターを使わない選択としますので、ここで完了します。ウイザードが完了するとsampleと言う名のワークスペースフォルダーが作成されています。中身のsample.hwsがこのワークスペースの登録情報を管理しているファイルです。前の方で異なるディレクトリを指定している様にも見えますが、そんな細かい事は気にしてはいけません!。これを書いたからと言ってお金貰える訳ではないので鷹揚に行きましょう。今度はプロジェクトフォルダーの中身を見てみます。sampleプロジェクトフォルダーの下に「Debug」と「Release」のフォルダーが存在しますが、これはプロジェクトを例えばデバック時や、最終的に製品にインストールするリリース時等に設定を変えてビルド管理できるようにデフォルトで用意されたものです。デバック時には最適化オプションを緩めに設定してデバックし易くし、リリース時には最適化を最大に掛けて性能を追求するとかの使い分けです。私自身は使い分けを全然していませんが。ウイザードが完了したらおもむろにビルドしてみて下さい。ファイルメニューの「ビルド(B)」→「ビルド(B)」です。動いて最終的にはHEWの一番したのペインに表示されている状態になればOKです。1つのWarningはセクションの設定には”C"セクション(定数領域)が設定されているにもかかわらず、実際には存在していないからです。プログラムを一行も組んでいませんから。ビルドが完了するとDebugフォルダーの中身が図の様になりました。今回はデフォルトセッションである「Debug」でビルドを掛けたのでこのフォルダー以下に中間ファイルやロードモジュール等が作成されています。これを前回紹介したワークフローの図に当て嵌めてみます。見難いですが我慢して下さい。最終的にはHEXファイルであるモトローラーSフォーマット形式のsample.motも同時にこのフォルダーに出来上がっています。ROMライター等を使用してH8マイコンにプログラムを書き込む時はこちらのmotファイルを使用します。※デバックの時はsample.absを使用します。ウイザードが作成したファイルの内、重要なファイルに付いて簡単に解説しておきます。データセクションの初期化を行う時の参照情報が納められています。割り込みベクターアドレス及び、割り込みサービスルーチンのエントリー関数が納められています。ウイザード中に「ベクターテーブル定義」にチェックが入っていた場合に生成されます。リセット直後に実行されるプログラム(通常CRTと呼ばれる)処理が書かれています。最終的にはここから関数mainが呼ばれます。関数mainが納められています。ユーザーはこのファイルを編集する事になります。ファイル名はプロジェクト名が付けられています。ウイザード中にHEAPを使う様に設定した場合に、HEAP領域の管理を行う処理が書かれています。ウイザード中にHEAPを使う様に設定した場合の、HEAPサイズが定義されています。使用するマイコンのIOレジスタを、アクセスし易い様に構造体定義したファイルです。ウイザード中に「IOレジスタ定義ファイル」にチェックが入っていた場合に生成されます。ウイザード中に設定したスタックサイズが定義されています。通常はワークフローで「自前で用意する必要があるファイル」と紹介したファイルも、ウイザードを使うと黙っていてもここまで作成してくれちゃいます。昔HEWがリリースされた頃、こう言った便利な機能に「おっ!」って思った物ですが、最近色々なIDEを使っていますが、もう当然の機能となっていますね。某Aと言う開発環境が、「割り込みベクターやCRTを書かなくてもマイコンが使えるから便利だ!」と紹介されているのを見たりしますが、IDEを使用した一般的なマイコンの開発現場ではもう何年も前からあたり前になっているの事なので、一体どんな環境と比較して優位だと言っているのかな?。HTERM]いや、多分簡単にプロジェクトを追加できる機能をHEWは持っているんだろうけれど、このやり方に慣れてしまっているので、その方法を披露します。画像はブラウザ画面上で右クリック等して、別の窓かタブでブラウジングすると、大きく見る事が出来ます。コピー元のプロジェクトが入ったフォルダをエクスプローラで参照します。プロジェクトファイルは何とか.hwpです。このフォルダーをそのまま右クリックでコピーし、そのフォルダの上位のフォルダ、多分ワークスペースファイル(なんとか.hwsの有る所)に、やはり右クリックで貼り付けを行います。なんとか」と言うフォルダーが作成されます。コピーしたフォルダーのプロパティで、フォルダー名を適当な名前に変更して置きます。このフォルダーの下にフォルダーが出来ていますが(H8やSHならDEBUGとかRELEASE、R8Cならobj_r8c1と言うのが有る)、このフォルダの中身はobjやlst等のファイルなので、中身を丸ごと削除しても構いません。ビルドすれば再び作成されるだけですから。コピーで新しく追加したフォルダーの何とか.hwpファイルをエディターで開きます。いやその前に、後々混乱が無い様に、追加したフォルダーのプロジェクト名やファイル名は変更して置いた方が良いでしょう。あと、何とか.navと何とか.tpsも名前の部分をプロジェクト名に合わせて置きます。何とか.hwpファイルをエディターで開くと、上の様な内容のテキストファイルである事が判ります。この内容を適当にいじれば、プロジェクトの設定等は維持したまま、新たにプロジェクトを追加できる事が判るかと思います。具体的には、フォルダー名や、ファイル名等も変更したらそれらの記述をエディタで編集する事となります。この時エディタの置換機能を使えば、一発ですね。次に、多分今居るフォルダの上の階層のワークスペースのフォルダの中の、何とか.hwsファイルを、やはりエディタで編集します。ワークスペースファイルの編集は更に簡単で、[PROJECTS]の中身にプロジェクトを追加するだけです。0これでこのワークスペースファイルをHEWから読み込めば、登録プロジェクトリストの中に追加プロジェクトが見えますので、後は煮るなり焼くなり。HTERM]そんな訳でデバックモニタ上で開発した、LCDが動いた時の定番メッセージを表示してみました。HTERM]今朝出かけ前に急いで(そんな必要有るのか?)アップしたので、デバックモニタの詳細について書いておりませんでした。そこで、これからデバックモニタを構築しようと思っている方の為に、稚拙ながら構築の為の情報を書きます。当然の事なのですがデバックモニタを構築する為にはSHCが必要となります。SHCのバージョンはver.8かver.9が有れば楽ですが、ver.7でも可能です。SHCは評価版がルネサスから入手できますので、SHCを持っていない方はこれを機に手に入れましょう。3ヵ月後の制限が掛かっても、SH/Tinyに関しては事実上制限無しですし。次にルネサスの半導体セミナーのサンプルプログラムからデバックモニタを手に入れます。ver.8、ver.9)の物をダウンロードします。ver.7の中身には、まだSH2/Tinyのデバックモニタが入っていません。HTERMからSH2/Tinyの書き込みを行う為には、HTERMのver.8.3(かそれ以上)が必要です。手持ちのHTERMのバージョンが8.2以前ならば、新しいHTERMも手に入れて置きます。FDTでも書き込みは可能です。デバックモニタを手に入れたら、STK-7125用の改造が必要となります。改造するファイルは以下の2つです。VECTOR/0,ROM,P,C/400,RAM/FFFFA000,USER/FFFFA160,SCI/FFFFC080あ、LOWERはお好みで!。STK-7125固有の処理の解説SH2/7125のSCI1で使用するPINは初期状態では固定されておらず、その為デバックモニタの起動時にユーザーがこのPINを何処に割り付けるかを決める必要が有ります。それがmonitor.cで行っている処理で、STK-7125の場合はPA3とPA4を使用する事となります。あと、ボーレートの設定はmonitor.subで行っています。「$BRR=13」の記述がそれですね。この場合は38400bpsとなります。これと、SH2/7125のRAMの開始アドレス、デバックモニタで使用するSCIの開始アドレスをリンカーに渡す必要が有ります。追記!RAMの底を指定するのを忘れていました。$STACK=FFFFC000」です。HTERMでの書き込みデバックモニタをHTERMの書き込み機能で書き込むのですが、設定について書いて置きます。その前にターゲットの電源を落として、FWEを1、MD1端子を0にして置きます。SH2/7125はH8/3069Fと同じ様に書き込みプログラムをマイコン内部に持っているタイプなので、いきなりフラッシュ(R)→ブートモード(B)と進みます。ここでターゲットの電源を投入しますと、品名を聞いて来ますので「R5F7125」を選択します。逓倍比の選択ではCPU、周辺機能共に×2を選択します。次に進んで、動作周波数では「12MHz」を、書き込みマットでは「ユーザーマット」まで進めば、ダウンロードするファイルをどれにするのか聞いて来ますので、今回はデバックモニタを選択しました。フラッシュROMへの書き込み完了後、FWEは0、MD1は1とし、電源を再投入します。HTERMにクレジットが表示されれば完了です。皆さん頑張ってデバックモニタを作ってみて下さい。HTERM]H8-MLで教えてもらったのですが、ツールがソースコードから関数の依存関係を解決できないところは、ユーザーがドラッグ&ドロップで解決できるなんてのは、始めて知りました。Walkerで解析して、その後手計算をしていましたが、これで随分楽になります。図のlcd_rootの下のバツ印が元々ツールの自動解析で解決できなかった依存関係で、バツの下にドラッグ&ドロップで持ってきた関数のスタックが表示されています。知らない事が沢山有るなあ。変数と非数との比較式および、非数との加減式で間違った値になる場合があります。構造体サイズが4バイト以下である構造体型変数を関数内で宣言したとき、その構造体メンバへの代入式が実行されない場合があります。3.配列要素への代入式の注意事項if文の前とthen節内で、同じ配列への代入文が存在するとき、その配列の値が正しく代入されない場合があります。値を参照する領域が間違っている場合があります。5.アセンブラソースファイル出力時のデータ幅出力の注意事項-code=asmcodeオプションを選択、アセンブラ埋め込みがあり、かつBRA/BC,BRA/BS命令のアドレッシングモードが絶対アドレスの場合に、ビット幅(@aa:nのn)が出力されない場合があります。全レジスタ(ER0~ER7)を使用している関数で、レジスタに値を割り付けるとき、そのレジスタにある値を上書きする場合があります。含むプログラムをアセンブラファイル出力するとき、ラベルを間違った位置に出力する場合があります。境界調整数が2バイトのメンバを奇数番地に配置する場合があります。詳細、解決方法はhttp://www.hitachi-ul.co.jp/MYICE/XSOFT/index.htmlの「製品情報」から。300Hには関係無いけれど、やばいのでは?。最近のコメントこんなものでよろしければ。場合..ありがとうございます。Electronicsアットマークエレ不要なデバイスドライバーを削除ダウンロードInterface付属SH2基板のSRAM有り/無しデバックモニタとHOS-V4同梱バージョンHOS本のサンプルをH8/3048Fでデバックする為のデバックモニタH8/3048Fのセクション情報ファイルインポートして使います。