SSブログ
HEW & HTERM ブログトップ
前の10件 | -

ルネサス H8、SH2用デバッガーのサイトがわかりにくい! [HEW & HTERM]

H8マイコンにデバックモニタを入れる。HTERMでデバックをする 2。 [HEW & HTERM]

前回の続きです。実際にデバックモニタを使った開発を”簡単”に解説します。
HEWを起動して、新たにワークスペースを作成しても良いのですが、関連と言う事で前に作成したsampleワークスペースの中に新たにプロジェクトを作成して、そこにアプリケーションを構築しましょう。

では、sampleワークスペースを開いてください。
次にファイルメニューの「プロジェクト(P)」→「プロジェクトの挿入(I)」でウイザードを起動し、「新規プロジェクト」を選択して先に進みます。ここから先は最初にワークスペースを生成した手順と同じになりますので、差分だけ以下に紹介します。
hew_image_36.png 今回はHEAPメモリを使いませんので、チェックを外して置きます。
hew_image_37.png stdio.hを組み込みたい所ですが、ここはぐっと堪えて。
hew_image_38.png 割り込みを使用しないので、割り込みベクターのチェックは外して置きます。
hew_image_39.png ウイザードが最後まで完了したら、追加したプロジェクトファイル名.cと、先に作成したデバックモニタのMAP出力(作成したデバックモニタのReleaseフォルダーにある)を編集画面に開きます。

あとは「組み込みモニタのカスタマイズ方法」と同じ様にマクロをCソースに書き込みます。 図ではprintfは0x2706番地から、scanfは0x273a番地から開始している事が判ります。
hew_image_40.png 実に簡単なプログラムなので、図を見てこの通りに入力してください。

また、左のペインの「dbsct.c」に赤いバッテンが付いています。dbsct.cの上にマウスカーソルを持って行って、右クリックから「ビルドからの除外」を選べばこの様になりますので、除外しておきます。

さあ!これでビルドだ!とは行きません。次はセクションの設定を行います。

「ビルド(B)」→「H8S/H8300 Standard Toolchain...」でツールチェインのダイアログを開き、「最適化リンカ」のTABを開いて各項目を設定します。
hew_image_41.png 「入力」の項目です。エントリーポイントにチェックを入れて、”_main”と記述します。勿論これはmain関数の事を指し、main関数の先頭アドレスのラベルを入力しています。
hew_image_42.png 「出力」の項目です。ROM→RAMコピーを行わないので、ハイライトしている項目を選び、DセクションからRセクションへのコピーの項目を削除してしまいます。
hew_image_43.png 「セクション」の項目です。右の並びのボタンを使って編集や削除を行い、図の様に設定します。

最終的にはPセクションとCセクションだけになってしまいますが、これは先のプログラムがPセクション(コード)、Cセクション(文字定数)しか使わないからです。また、Pセクションの開始アドレスは、後ほど解説しますが、デバックモニタの”?”コマンドで出力したメモリマッピング情報のUSER領域の開始アドレスを示しています。

設定が完了したらビルドを行ってください。最初のビルドは少し時間が掛かります。エラーや警告が発生していなければ終了です。
hew_image_44.png 話が長くなったので、ここからは飛ばして解説します。

デバックモニタが書かれたターゲットと、HTERMを起動します。デバックモニタのクレジットを確認したら”?”コマンドを打って下さい。

USER Vectorの項目に着目します。本来はここは本当にユーザーの定義した割り込みベクターの配置アドレスなのですが、今回は一切割り込みを使用していないので、ここのアドレスにプログラムを転送する事とします。

次にF9ボタンで先にビルドしたロードモジュールを読み込みます。多分Debugフォルダー以下に出来ている、拡張子がabsのファイルです。読み込みが完了すれば、読み込み開始アドレスと終了アドレスが表示されています。

F5ボタンを押すと関数mainから実行が開始されます。
hew_image_45.png ロードモジュールを読み込んだ時にこの図の様なWindowも開いたと思いますが、この画面上でデバックが可能です。画面の左端をダブルクリックするとブレークポイントを設定できます。

黄色くハイライトされている行がPC(プログラムカウンタ)が示す行です。ステップ実行すれば一行づつ進みます。



という訳で実にお手軽なマイコンによるHello Worldでした。

もうご存知かと思いますが、ユーザーアプリケーションの転送はRAMに行われますので、一度電源を落としてしまうと再ロードが必要です。逆にFLASH ROMを使わないので幾らでも書き換えが可能です。
逆にRAMの容量の上限がユーザープログラムで作成できるサイズの上限でもあります。H8/TinyのRAM容量ではかなり苦しいですね。

普通、マイコンの開発では標準入出力がありません。なのでstdioの中の標準入出力を利用する関数を実際に動くようにするには、ユーザー側でそれを実現してやる必要があります。

しかしデバックモニタ上で動かす場合、既にデバックモニタが入出力のインタフェースとしてSCIを利用しているので、ここを標準入出力として使いましょう!と言うのが「組み込み型モニタのカスタマイズ」htmファイルの趣旨なのです。

デバック完了してオリジナルのアプリケーションをROM化する時は、自分で標準入出力を実現する必要があります。詳細はC/C++コンパイラマニュアルに書かれていますので、ご一読ください。



H8マイコン完全マニュアル

H8マイコン完全マニュアル

  • 作者: 藤沢 幸穂
  • 出版社/メーカー: オーム社
  • 発売日: 2000/12
  • メディア: 単行本



C言語でH8マイコンを使いこなす

C言語でH8マイコンを使いこなす

  • 作者: 鹿取 祐二
  • 出版社/メーカー: オーム社
  • 発売日: 2003/10
  • メディア: 単行本



H8マイコンにデバックモニタを入れる。HTERMでデバックをする。 [HEW & HTERM]

hew_image_32.pngH8を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の機能を十分に使いこなせないので、開発はルネサス純正のツールチェインを使った方が良いでしょう。

以上、概要は終了

では上記写真のページに辿り着いたら
「HEW3,HEW4(C/C++ Compiler Ver. 6.0)対応版 H8/300H用 モニタプログラム」または「HEW3,HEW4(C/C++ Compiler Ver. 6.0)対応版 H8/300H Tiny用 モニタプログラム」と、
「モニタプログラム専用通信ソフト Hterm」をダウンロードしてください。
※300hhew3.exe、300thew3.exeは実行形式のファイルなので、場合によってはセキュリティソフトに文句を言われるかもしれませんね。


hew_image_33.pngダウンロード後、適当なフォルダで自動解凍を行います。
すると、Opera上に自動的に「組み込みモニタのカスタマイズ方法」と言うページが開きました。なーんだ、解説要らないジャン。
※下手な解説読むより、作った本人の解説があれば、そっちを読んだ方が良いのは言うまでもないですよね。それでも判らない事が有ればコメント欄へどうぞ。



と言う訳でまずは展開されたreadme.htmを読んでください。同じ事を解説しても無駄ですから。
あとmonitor.htmの方も読んでおくと良いでしょう。
※できれば「printf関数、scanf関数のサポート」を読んで、これら機能を一緒に組み込んで置くとお得です。

ダブった事は書いてもしょうがないので、マイコンに依存する所のみ紹介して置きます。
※特にROM容量をケチる必要も無いので、「組み込み型モニタの機能選択」は行わず、フル機能で構築しています。
※ボーレートの設定値ですが、使用するマイコンのデータシートのSCIのBRRの項目に、親切にも計算済みの値が書いてありますので、それを使ってください。但し記述は16進です。

例1.H8/3069Fマイコンの場合。秋月の3069FLANボードを想定。CPUクロック20MHz、DRAM16Mbit、ボーレート38400bps、printf、scanfの実現有り。
monitor.src
;************************************************************************
;*      H8/300H Monitor Program (Advanced Mode)         Ver. 3.0A       *
;*              Copyright (C) 2003 Renesas Technology Corp.             *
;************************************************************************
                .PROGRAM  INITIALIZE            ; Program Name
                .CPU      300HA                 ; CPU is H8/300H Advanced
                .SECTION  ROM,CODE,ALIGN=2      ; ROM Area Section
;************************************************************************
;*      Export Define                                                   *
;************************************************************************
                .EXPORT _INITIALIZE             ; User Initialize Module
;************************************************************************
;*      User Initialize Module                                          *
;*              Input   ER5 <-- Return Address                          *
;*              Output  Nothing                                         *
;*              Used Stack Area --> 0(0) Byte                           *
;************************************************************************
_INITIALIZE:
;DRAM空間はCS2に取られている。16Mbit、8bitバス、60nsのDRAMが実装済み
;PORT1、2、5を初期化しアドレスを出力モードにする
P1DDR	.equ h'fee000
P2DDR	.equ h'fee001
P5DDR	.equ h'fee004
P8DDR	.equ h'fee007
ASTCR	.equ h'fee021        	;アクセスステートコントロールレジスタ
WCRH	.equ h'fee022        	;WAITコントロールレジスタ
WCRL	.equ h'fee023        	;WAITコントロールレジスタ
DRCRA	.equ h'fee026        	;DRAMコントロールレジスタA
DRCRB	.equ h'fee027        	;DRAMコントロールレジスタB
RTMCSR	.equ h'fee028        	;リフレッシュコントロール/ステータスレジスタ
RTCNT	.equ h'fee029        	;リフレッシュタイマカウンター
RTCOR	.equ h'fee02A        	;リフレッシュタイムコンスタンとレジスタ
;コメントを付けると内蔵メモリだけの利用となる
		mov.b	#h'ff,r0l
		mov.b	r0l,@P1DDR        ;PORT1 アドレス出力
		mov.b	#h'07,r0l        ;A10まで有効とする
		mov.b	r0l,@P2DDR        ;PORT2 アドレス出力
		mov.b	#h'e8,r0l        ;松川様の連絡により判明
		mov.b	r0l,@P8DDR        ;PORT2 アドレス出力

		mov.b	#155,r0l        ;155で約64KHzのリフレッシュ
;		mov.b	#99,r0l        	;99で約100KHzのリフレッシュ
		mov.b	r0l,@RTCOR        ;

		mov.b	#h'0F,r0l        ;b'0000 1111
		mov.b	r0l,@RTMCSR        ;Φ2

		mov.b	#h'98,r0l        ;b'1001 1000
		mov.b	r0l,@DRCRB        ;カラムアドレス10bit

;		mov.b	#h'3c,r0l        ;b'0011 1100 fast page のバーストモード用
;		mov.b	#h'34,r0l        ;b'0011 0100 フルアクセス用
		mov.b	#h'38,r0l        ;b'0011 1000 峰松さんお勧め、FAST PAGE、EDOドンと来い設定。バースト有りのRASアップモード用
		mov.b	r0l,@DRCRA        ;エリア2をDRAM空間に設定、FPモード、RASダウンモード

;8リフレッシュサイクル分のwaitを入れる(リフレッシュサイクル100KHz時)
wait80u	.equ 80*100/64
		mov.l	#wait80u,er0		;ループ数の設定
refresh_loop:                		;1ループ1μs(20MHz時)
		nop                	;nopは2ステート消費
		nop                	;nopは2ステート消費
		nop                	;nopは2ステート消費
		nop                	;nopは2ステート消費
		nop                	;nopは2ステート消費
		nop                	;nopは2ステート消費
		dec.l	#1,er0        	;dec.lは2ステート消費
		bne		refresh_loop		;bneは6ステート消費
;
	    JMP     @ER5                    ; Goto Monitor Program
       .END                            ;

monitor.sub
INPUT      ADVANCED,MONITOR,LOWER
LIST       MON3068R20.MAP
SHOW       SYMBOL
OUTPUT     MON3068R20.MOT
FORM       STYPE
NOOPTIMIZE
LIBRARY    ADVANCED,3068
LIBRARY    MONITOR
DEFINE     $BRR=0F
DEFINE     $STACK=0FFFF20
START      VECTOR/0,ROM,C/100,RAM/0FFBF20,USER/0FFBFF4,SCI/0FFFFB8


例2.H8/3048Fマイコンの場合。CPUクロック16MHz、外部メモリ無し、ボーレート38400bps、printf、scanfの実現有り。
※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。
※3048Fに付いては、いま動かせる基板が無いので動作未確認。
INPUT      ADVANCED,MONITOR,LOWER
LIST       MON3048N16.MAP
SHOW       SYMBOL
OUTPUT     MON3048N16.MOT
FORM       STYPE
NOOPTIMIZE
LIBRARY    ADVANCED,3048
LIBRARY    MONITOR
DEFINE     $BRR=0C
DEFINE     $STACK=FFFF10
START      VECTOR/0,ROM,C/100,RAM/0FFEF10,USER/0FFF030,SCI/0FFFFB8


例3.H8/3694F Tinyマイコンの場合。CPUクロック20MHz、ボーレート38400bps、printf、scanfの実現有り。
※INITIALIZEには特に書く事が無いので、subファイルのみ紹介。
INPUT      NORMAL,MONITOR,LOWER
LIST       MON3694N20.MAP
SHOW       SYMBOL
OUTPUT     MON3694N20.MOT
FORM       STYPE
NOOPTIMIZE
LIBRARY    NORMAL,3694
LIBRARY    MONITOR
DEFINE     $BRR=0F
DEFINE     $STACK=FF00
START      VECTOR/0,ROM,C/100,RAM/F780,USER/F880,SCI/FFA8

※以下のSUBファイルの記述は修正が入っています。
START VECTOR/0,ROM,C/100,RAM/F780,USER/F880,SCI/FFA8
USER/F840→USER/F880

MOTファイルが出来上がったらFDTでターゲットに書き込みます。
※HTERM自体にも書き込み機能が有るのですが、H8/3069F以外は自前で書き込みモジュールを用意する必要があります。書き込みモジュールの作り方も何処かにドキュメントが有った筈なんだけれど。

書き込みが完了したらFDTとターゲットとの接続を解除し、HTERMを立ち上げて(COMポート番号とボーレートには注意して)コンソールを開きます。
ターゲットの動作モードをブートモードから通常の動作モードに切り替えて、電源の再投入かリセットを実行します。
以下の画面が表示されればデバックモニタの構築は完了です。


hew_image_34.png
hew_image_35.png




H8マイコン完全マニュアル

H8マイコン完全マニュアル

  • 作者: 藤沢 幸穂
  • 出版社/メーカー: オーム社
  • 発売日: 2000/12
  • メディア: 単行本



C言語でH8マイコンを使いこなす

C言語でH8マイコンを使いこなす

  • 作者: 鹿取 祐二
  • 出版社/メーカー: オーム社
  • 発売日: 2003/10
  • メディア: 単行本



H8でLEDチカチカ、、、まずはここからですね。 [HEW & HTERM]

IMG_1428.JPG前回はウイザードを使ってプロジェクトを作成するところまで行いました。今度はLEDチカチカのプログラムを記述し、FDTでH8マイコンに書き込んで動かしてみるところまでやります。



hew_image_30.png HEWのエディタ画面にsample.cを開き、関数mainの中にLEDチカチカのプログラムを記述します。

簡単なプログラムであり、画面に写っているコードが全てです。

記述したらビルドを行います。ファイルメニューの「ビルド(B)」→「ビルド(B)」でこのプログラムを含む全体の構成ファイルがビルドされ、最終的にH8マイコンに書き込むsample.motが出来上がります。

※Warinigが出ていますが気にしないで下さい。



次に出来上がったsample.motをH8マイコンに書き込む為、FDTを起動してください。
※H8マイコンとはUSB/シリアルで接続しています。今回はCOM9になっています。
実際に使用するCOMポート番号は事前にデバイスマネージャー等で調べておきます。
hew_image_20.png FDTを起動するとこのダイアログが開きますので、「新規プロジェクトワークスペースの作成」を選択してOKします。

2回目からは、下の2つのチェックマークのどちらかを選んで進みます。
hew_image_21.png ワークスペース名やワークスペースの保存先等を適当に書き込んでOKします。
hew_image_22.png 今回はH8/3694Fを使用します。
hew_image_23.png 使用するCOMポートを選択します。
hew_image_24.png H8マイコンに入力されているクロックの周波数を設定します。

※最近のOne chip マイコンは大概マイコン内部にCPUクロックの発振メカニズムを持っていますので、外部にクロックが必要と言うこう言った所にH8マイコンの設計の古さを感じてしまいます。確か最初の設計は20年前位じゃあなかったっけ?。
hew_image_25.png Boot Modeを選択してOKします。
hew_image_26.png ここもデフォルトのままで「完了」ボタンをクリックします。手数は多いですが別に難しくは無いですね。
hew_image_27.png ファイルメニューから「FILE(F)」→「データファイルを開く(L)」で先程作成したsample.motを読み出します。

読み出しが完了すると右のペインにダンプリストが表示されます。
hew_image_28.png 「デバイス(D)」→「デバイスとの接続(C)」でH8マイコンとの通信を開始し、H8/3649Fの場合は書き込みプログラムがマイコンに転送されます。

※事前にH8マイコンをBoot Modeで起動するように設定しておきます。手順は、ポート8のbit5(P85端子)をHi、NMI(NMI端子)をLoにした状態で電源を投入(またはリセット)します。
hew_image_29.png 「デバイス(D)」→「対象ファイルのダウンロード(L)」でH8マイコンに先のsample.motの転送を行います。

成功すると図の様になります。

成功したならば、接続を解除します。「デバイス(D)」→「デバイスとの切断(D)」で行います。

※もし失敗して書き直しが必要な時は、電源の再投入からやり直してください。



hew_image_31.png ポート8のbit0に図の様にLEDを接続します。私のところでは高輝度タイプのLEDを使用したので電流制限抵抗が大きめですが、実際に使用するLEDに合わせて抵抗値を加減する必要があります。

※このH8評価基板には初めから基板上にLEDが実装されています!。冒頭の写真の基板の右上辺りで光っているLEDがそれです。

※最近のOne Chipマイコンではシンク(引き込み)もソース(吐き出し)もLEDを駆動するには十分な能力が、しかも全ポートに備わっている物も多いのですが、H8マイコンではLEDを直接駆動できるポートは限られてしまいます。また、シンクは10mAとか20mAとか引き込めるのですが、ソースは根性無しです。やはりこう言った所にも設計の古さを感じてしまいますね。




「C言語でH8マイコンを使いこなす」は是非ご一読頂きたい本です。目から鱗です。

C言語でH8マイコンを使いこなす

C言語でH8マイコンを使いこなす

  • 作者: 鹿取 祐二
  • 出版社/メーカー: オーム社
  • 発売日: 2003/10
  • メディア: 単行本



H8マイコン完全マニュアル

H8マイコン完全マニュアル

  • 作者: 藤沢 幸穂
  • 出版社/メーカー: オーム社
  • 発売日: 2000/12
  • メディア: 単行本



H8開発環境HEWのウイザードを使ってプロジェクトを作成する。& 構成ファイルを眺めてみる。 [HEW & HTERM]

まずは、プロジェクトの生成ウイザードを簡単に解説して行きます。
hew_image_03.png HEWを起動した時に出るダイアログボックスからウイザードを起動して新規にプロジェクトを作成する事ができます。どんどん行きましょう。
hew_image_04.png ワークスペース名やプロジェクト名、CPU種別等を設定するダイアログです。 ワークスペース名は適当にsampleとしました。CPU種別はH8/300H、ツールチェインはやはりH8/300H用を使用します。
hew_image_05.png ツールチェインバージョン、CPUシリーズ、CPUを選択して行きます。今回使用するのはH8/Tinyシリーズの3694Fです。このマイコンはH8/300Hのコアを搭載し、Normalモード(アドレス範囲が64K以下)で動きます。
hew_image_06.png とりあえずこの画面では特に選択しないで先に進みます。 ※ちら!っと見えている「引数格納レジスタを2つから3つに変更」と言うのもなかなか面白いオプションですが。
hew_image_07.png HEAPメモリはmalloc等を使う時に必要となります。動的にメモリを確保しないのならば、ここのチェックは外した方が良いでしょう。
hew_image_08.png 使用したい標準ライブラリにチェックを入れて置きます。いまここで入れなくても、後ほど追加、削除も出来ます。
hew_image_09.png リセットスタート時にスタックポインタを設定しますが、その時の値とトータルのスタック使用サイズを指定します。 H8/3694FのRAM領域はデータシートから0xF780~0xFF7Fの2Kbyteとなっていますので、この値はSRAMの底を指定している事となります。

※SRAMの最後だから”0xFF7F”とはなりません。スタック操作はPre Decrement(先に減算を行ってから)で行われますので、最初のスタック操作(PUSH)時に”0xFF80 - 2”してからそのアドレスに値が代入されるからです。また、スタックポインタは必ず2byte境界である必要があります。
hew_image_10.png ここはチェックを入れたまま先に進みます。
hew_image_11.png HEW付属のシミュレーターを使う場合はここにチェックを入れて先に進みます。シミュレーターを使わない場合はチェックを入れずに完了ボタンをクリックします。 ※画面はチェックを入れてしまっていますが、今回はシミュレーターを使わない選択としますので、ここで完了します。




hew_image_14.png ウイザードが完了するとsampleと言う名のワークスペースフォルダーが作成されています。

中身のsample.hwsがこのワークスペースの登録情報を管理しているファイルです。

前の方で異なるディレクトリを指定している様にも見えますが、そんな細かい事は気にしてはいけません!。これを書いたからと言ってお金貰える訳ではないので鷹揚に行きましょう。
hew_image_15.png 今度はプロジェクトフォルダーの中身を見てみます。sampleプロジェクトフォルダーの下に「Debug」と「Release」のフォルダーが存在しますが、これはプロジェクトを例えばデバック時や、最終的に製品にインストールするリリース時等に設定を変えてビルド管理できるようにデフォルトで用意されたものです。

例えばデバック時には最適化オプションを緩めに設定してデバックし易くし、リリース時には最適化を最大に掛けて性能を追求するとかの使い分けです。まあ、私自身は使い分けを全然していませんが。
hew_image_17.png ウイザードが完了したらおもむろにビルドしてみて下さい。ファイルメニューの「ビルド(B)」→「ビルド(B)」です。

しばらくごそごそ動いて最終的にはHEWの一番したのペインに表示されている状態になればOKです。

1つのWarningはセクションの設定には”C"セクション(定数領域)が設定されているにもかかわらず、実際には存在していないからです。まあそれはそうです。まだプログラムを一行も組んでいませんから。
hew_image_18.png ビルドが完了するとDebugフォルダーの中身が図の様になりました。今回はデフォルトセッションである「Debug」でビルドを掛けたのでこのフォルダー以下に中間ファイルやロードモジュール等が作成されています。
hew_image_16.png これを前回紹介したワークフローの図に当て嵌めてみます。ちょっと見難いですが我慢して下さい。

また、最終的にはHEXファイルであるモトローラーSフォーマット形式のsample.motも同時にこのフォルダーに出来上がっています。ROMライター等を使用してH8マイコンにプログラムを書き込む時はこちらのmotファイルを使用します。※デバックの時はsample.absを使用します。



ウイザードが作成したファイルの内、重要なファイルに付いて簡単に解説しておきます。
dbsct.c データセクションの初期化を行う時の参照情報が納められています。
intprg.c 割り込みベクターアドレス及び、割り込みサービスルーチンのエントリー関数が納められています。

ウイザード中に「ベクターテーブル定義」にチェックが入っていた場合に生成されます。
resetprg.c リセット直後に実行されるプログラム(通常CRTと呼ばれる)処理が書かれています。

最終的にはここから関数mainが呼ばれます。
sample.c 関数mainが納められています。ユーザーはこのファイルを編集する事になります。なお、ファイル名はプロジェクト名が付けられています。
sbrk.c ウイザード中にHEAPを使う様に設定した場合に、HEAP領域の管理を行う処理が書かれています。
sbrk.h ウイザード中にHEAPを使う様に設定した場合の、HEAPサイズが定義されています。
iodefine.h 使用するマイコンのIOレジスタを、アクセスし易い様に構造体定義したファイルです。

ウイザード中に「IOレジスタ定義ファイル」にチェックが入っていた場合に生成されます。
stacksct.h ウイザード中に設定したスタックサイズが定義されています。



通常はワークフローで「自前で用意する必要があるファイル」と紹介したファイルも、ウイザードを使うと黙っていてもここまで作成してくれちゃいます。
昔HEWがリリースされた頃、こう言った便利な機能に「おっ!」って思った物ですが、最近色々なIDEを使っていますが、もう当然の機能となっていますね。
某Aと言う開発環境が、「割り込みベクターやCRTを書かなくてもマイコンが使えるから便利だ!」と紹介されているのを見たりしますが、IDEを使用した一般的なマイコンの開発現場ではもう何年も前からあたり前になっているの事なので、一体どんな環境と比較して優位だと言っているのかな?。

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発

  • 作者: 濱原 和明
  • 出版社/メーカー: オーム社
  • 発売日: 2005/04/25
  • メディア: 単行本



C言語でH8マイコンを使いこなす

C言語でH8マイコンを使いこなす

  • 作者: 鹿取 祐二
  • 出版社/メーカー: オーム社
  • 発売日: 2003/10
  • メディア: 単行本



H8マイコン完全マニュアル

H8マイコン完全マニュアル

  • 作者: 藤沢 幸穂
  • 出版社/メーカー: オーム社
  • 発売日: 2000/12
  • メディア: 単行本



HEWの簡単プロジェクトコピー大作戦 [HEW & HTERM]

いや、多分簡単にプロジェクトを追加できる機能をHEWは持っているんだろうけれど、このやり方に慣れてしまっているので、その方法を披露します。
なお、画像はブラウザ画面上で右クリック等して、別の窓かタブでブラウジングすると、大きく見る事が出来ます。

まずコピー元のプロジェクトが入ったフォルダをエクスプローラで参照します。 プロジェクトファイルは何とか.hwpです。
このフォルダーをそのまま右クリックでコピーし、そのフォルダの上位のフォルダ、多分ワークスペースファイル(なんとか.hwsの有る所)に、やはり右クリックで貼り付けを行います。そうすると、貼り付けしたフォルダーに、「コピー ~ なんとか」と言うフォルダーが作成されます。
コピーしたフォルダーのプロパティで、フォルダー名を適当な名前に変更して置きます。 また、このフォルダーの下にフォルダーが出来ていますが(H8やSHならDEBUGとかRELEASE、R8Cならobj_r8c1と言うのが有る)、このフォルダの中身はobjやlst等のファイルなので、中身を丸ごと削除しても構いません。ビルドすれば再び作成されるだけですから。
コピーで新しく追加したフォルダーの何とか.hwpファイルをエディターで開きます。いやその前に、後々混乱が無い様に、追加したフォルダーのプロジェクト名やファイル名は変更して置いた方が良いでしょう。 あと、何とか.navと何とか.tpsも名前の部分をプロジェクト名に合わせて置きます。
[HIMDBVersion]
2.0
[DATABASE_VERSION]
"2.8" 
[PROJECT_DETAILS]
"step5" "E:\smalight\ner8c25\step5" "E:\smalight\ner8c25\step5\step5.hwp"
[INFORMATION]
"No project information available" 
[TOOL_CHAIN]
"Renesas M16C Standard Toolchain" "5.43.00" 
何とか.hwpファイルをエディターで開くと、上の様な内容のテキストファイルである事が判ります。 つまり、この内容を適当にいじれば、プロジェクトの設定等は維持したまま、新たにプロジェクトを追加できる事が判るかと思います。 具体的には、フォルダー名や、ファイル名等も変更したらそれらの記述をエディタで編集する事となります。この時エディタの置換機能を使えば、一発ですね。
次に、多分今居るフォルダの上の階層のワークスペースのフォルダの中の、何とか.hwsファイルを、やはりエディタで編集します。
[PROJECTS]
"step3" "E:\smalight\ner8c25\step3" "E:\smalight\ner8c25\step3\step3.hwp" 0 
"step4" "E:\smalight\ner8c25\step4" "E:\smalight\ner8c25\step4\step4.hwp" 0 
"step5" "E:\smalight\ner8c25\step5" "E:\smalight\ner8c25\step5\step5.hwp" 0 
"u-ap" "E:\smalight\ner8c25\smalight" "E:\smalight\ner8c25\smalight\u-ap.hwp" 0 
ワークスペースファイルの編集は更に簡単で、[PROJECTS]の中身にプロジェクトを追加するだけです。例えばこんな感じですね。

"step6" "E:\smalight\ner8c25\step6" "E:\smalight\ner8c25\step6\step6.hwp" 0

これでこのワークスペースファイルをHEWから読み込めば、登録プロジェクトリストの中に追加プロジェクトが見えますので、後は煮るなり焼くなり。


STK-7125のデバックモニタ(SH2/7125) 2BUG目 [HEW & HTERM]

そんな訳でデバックモニタ上で開発した、LCDが動いた時の定番メッセージを表示してみました。


STK-7125のデバックモニタ(SH2/7125) [HEW & HTERM]

今朝出かけ前に急いで(そんな必要有るのか?)アップしたので、デバックモニタの詳細について書いておりませんでした。そこで、これからデバックモニタを構築しようと思っている方の為に、稚拙ながら構築の為の情報を書きます。

まず、当然の事なのですがデバックモニタを構築する為にはSHCが必要となります。SHCのバージョンはver.8かver.9が有れば楽ですが、ver.7でも可能です。SHCは評価版がルネサスから入手できますので、SHCを持っていない方はこれを機に手に入れましょう。3ヵ月後の制限が掛かっても、SH/Tinyに関しては事実上制限無しですし。

次にルネサスの半導体セミナーのサンプルプログラムからデバックモニタを手に入れます。この時、SH2、HEW3(SHC ver.8、ver.9)の物をダウンロードします。SHC ver.7の中身には、まだSH2/Tinyのデバックモニタが入っていません。

HTERMからSH2/Tinyの書き込みを行う為には、HTERMのver.8.3(かそれ以上)が必要です。もし手持ちのHTERMのバージョンが8.2以前ならば、新しいHTERMも手に入れて置きます。勿論FDTでも書き込みは可能です。

さて、デバックモニタを手に入れたら、STK-7125用の改造が必要となります。改造するファイルは以下の2つです。

  1. monitor.c
  2. monitor.sub
monitor.cの改造
void INITIALIZE(void)
{
  CPG.FRQCR.WORD = 0x16db;
    /*Iφ=48MHz、Bφ=24MHz、Pφ=24MHz、MPφ=24MHz*/
  PFC.PACRL2.BIT.PA4MD = 1;  /* PA4 is TxD1*/
  PFC.PACRL1.BIT.PA3MD = 1;  /* PA3 is RxD1*/
}  /* Goto Monitor Program */
monitor.subの改造
INPUT      SUPERH,MONITOR,LOWER
LIST       MONITOR.MAP
SHOW       SYMBOL
OUTPUT     MONITOR.MOT
FORM       STYPE
NOOPTIMIZE
LIBRARY    SUPERH,7125
LIBRARY    MONITOR
DEFINE     $BRR=13
DEFINE     $STACK=FFFFC000
START      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の開始アドレスをリンカーに渡す必要が有ります。「VECTOR/0,ROM,P,C/400,RAM/FFFFA000,USER/FFFFA160,SCI/FFFFC080」 の記述がそれですね。
追記!RAMの底を指定するのを忘れていました。 「DEFINE $STACK=FFFFC000」です。

HTERMでの書き込み

デバックモニタをHTERMの書き込み機能で書き込むのですが、設定について書いて置きます。その前にターゲットの電源を落として、FWEを1、MD1端子を0にして置きます。
SH2/7125はH8/3069Fと同じ様に書き込みプログラムをマイコン内部に持っているタイプなので、いきなりフラッシュ(R)→ブートモード(B)と進みます。
ここでターゲットの電源を投入しますと、品名を聞いて来ますので「R5F7125」を選択します。
逓倍比の選択ではCPU、周辺機能共に×2を選択します。
次に進んで、動作周波数では「12MHz」を、書き込みマットでは「ユーザーマット」まで進めば、ダウンロードするファイルをどれにするのか聞いて来ますので、今回はデバックモニタを選択しました。
フラッシュROMへの書き込み完了後、FWEは0、MD1は1とし、電源を再投入します。HTERMにクレジットが表示されれば完了です。 以上! では皆さん頑張ってデバックモニタを作ってみて下さい。

スタック解析ツール(Call Walker) [HEW & HTERM]


H8-MLで教えてもらったのですが、ツールがソースコードから関数の依存関係を解決できないところは、ユーザーがドラッグ&ドロップで解決できるなんてのは、始めて知りました。以前はある程度Call Walkerで解析して、その後手計算をしていましたが、これで随分楽になります。

図のlcd_rootの下のバツ印が元々ツールの自動解析で解決できなかった依存関係で、バツの下にドラッグ&ドロップで持ってきた関数のスタックが表示されています。

まだまだ知らない事が沢山有るなあ。


H8用コンパイラのバグ情報 [HEW & HTERM]

メールマガジンからの転載(転載禁止とは書いていなかったので)

1.非数をオペランドに持つ式の注意事項
変数と非数との比較式および、非数との加減式で間違った値になる場合がありま
す。

2.構造体のメンバへの代入式の注意事項
構造体サイズが4バイト以下である構造体型変数を関数内で宣言したとき、その
構造体メンバへの代入式が実行されない場合があります。

3.配列要素への代入式の注意事項
if文の前とthen節内で、同じ配列への代入文が存在するとき、その配列の値が正
しく代入されない場合があります。

4.__asm内のユーザラベル記述の注意事項
__asm{}使用時、シンボル(関数、変数およびラベル)数が256個以上あるときに、
値を参照する領域が間違っている場合があります。

5.アセンブラソースファイル出力時のデータ幅出力の注意事項
-code=asmcodeオプションを選択、アセンブラ埋め込みがあり、かつBRA/BC,
BRA/BS命令のアドレッシングモードが絶対アドレスの場合に、ビット幅(@aa:nの
n)が出力されない場合があります。

6.レジスタ値の上書きの注意事項
全レジスタ(ER0~ER7)を使用している関数で、レジスタに値を割り付けるとき、
そのレジスタにある値を上書きする場合があります。
注意:本問題が発生するのは V.6.01 Release 00 のみです。

7.アセンブラファイル出力時のラベル出力位置の注意事項
遅延分岐命令を含むプログラムをアセンブラファイル出力するとき、ラベルを
間違った位置に出力する場合があります。

8.変数の奇数番地割り付きの注意事項
構造体型変数で、境界調整数が2バイトのメンバを奇数番地に配置する場合があ
ります。

詳細、解決方法は
http://www.hitachi-ul.co.jp/MYICE/XSOFT/index.html
の「製品情報」から。

300Hには関係無いけれど、やばいのでは?。




前の10件 | - HEW & HTERM ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。