2.9.4 指定ルーチンを実行する【E1】【E20】【EZ Emulator】

プログラムの実行開始直前および停止直後にプログラムの指定ルーチンを実行することができます。

プログラムの実行や停止に同期してターゲット・システムの制御を行いたい場合に,任意ルーチンを設定します。

なお,実行中のプログラムの停止方法については,「2.10 プログラムの停止(ブレーク)」を参照してください。

ここでは,実行するルーチンを指定する方法について説明します。

指定ルーチンは,プロパティ パネル[デバッグ・ツール設定]タブにおける[システム]【E1】【E20】【EZ Emulator】カテゴリ内のプロパティにて指定します。

-

プログラムの実行開始直前に指定する場合
[実行開始前に指定ルーチンを実行する]プロパティを[はい]を選択して,この操作で表示される[実行開始前に実行するルーチン]プロパティにおいて実行開始アドレスを入力してください。
指定されたルーチンがプログラム実行直前に実行されます。

-

プログラムの停止直後に指定する場合
[ブレーク後に指定ルーチンを実行する]プロパティを[はい]を選択して,この操作で表示される[ブレーク後に実行するルーチン]プロパティにおいて実行開始アドレスを入力してください。
指定されたルーチンがプログラム停止直後に実行されます。

 

なお,[実行開始前に指定ルーチンを実行する]または[ブレーク後に指定ルーチンを実行する]プロパティのいずれかで[はい]を選択すると,[指定ルーチン実行機能用ワークRAM開始アドレス]プロパティが表示されます。指定したワークRAMの配置アドレスから[指定ルーチン実行機能用ワークRAMサイズ[バイト]]プロパティの表示サイズ分を,指定ルーチン実行機能用ワークRAM領域としてデバッガのファームウェアが使用します。

指定ルーチン実行機能を使用する場合は,このワークRAM領域を指定してください。

図 2.102

[システム]カテゴリ

注意 1.

[実行開始前に実行するルーチン],[ブレーク後に実行するルーチン]および[指定ルーチン実行機能用ワークRAM開始アドレス]プロパティのプロパティ値には,C言語の場合は関数名,アセンブリ言語の場合はラベル名も指定することができます。

注意 2.

指定ルーチン内でスタックを使用する場合,割り込みスタックを使用してください。

注意 3.

指定ルーチン処理の終了は,リターンサブルーチン命令(RTS)を記述してください。

注意 4.

1回の指定ルーチンの処理時間は100ms以内に終了させてください。指定ルーチン内でクロック停止状態を継続させた場合,デバッグ・ツールの制御ができない可能性があります。

注意 5.

指定ルーチン実行開始時のレジスタ値は不定です。そのため,指定ルーチン内でレジスタ値の初期設定をしてください。

注意 6.

指定ルーチンの実行直前および停止直後は,デバッグ・ツールの制御で停止状態となります。なお,停止時間は次のようになります。

-

ユーザ・プログラム実行開始前の指定ルーチン実行後,約100サイクル(CPUクロック:100MHzの場合,約1μs)でユーザ・プログラムを実行します。

-

ユーザ・プログラム停止後から,約100サイクル(CPUクロック:100MHzの場合,約1μs)で指定ルーチンを実行します。
ただし,内蔵ROM無効拡張モード時は,ユーザ・プログラム停止後から,CPUクロック:100MHzにて約3ms,CPUクロック:32kHzにて約8msで指定ルーチンを実行します。また,ホットプラグイン接続した場合の,最初のユーザ・プログラム停止時も,同様です。

注意 7.

指定ルーチンは開始時にスーパーバイザモードで実行しますので,ユーザモードに切り替えないでください。

注意 8.

指定ルーチンを実行する場合,指定ルーチンのプログラム領域へのメモリアクセス/ダウンロード/ブレークポイント設定を行わないでください。

注意 9.

指定ルーチン実行機能使用時は,[指定ルーチン実行機能用ワークRAM開始アドレス]から230h(560)バイト分のRAM領域を,エミュレータ専用に使用します。
この領域を,ユーザ・プログラムおよび指定ルーチン内で使用しないでください。
この領域は,内蔵RAM領域に配置してください。
なお,[指定ルーチン実行機能用ワークRAM開始アドレス]は,4で割り切れる値にしてください。


注意 10.

指定ルーチンで使用する汎用レジスタおよびフラグについては,次の制限があります。

ISPレジスタ

指定ルーチン終了時に,指定ルーチン実行開始時の値に戻してください。

Uフラグ

指定ルーチンを実行中はユーザスタックポインタ(USP)の指定は禁止となります。

Iフラグ

指定ルーチンを実行中は割り込み禁止となります。

PMフラグ

指定ルーチンを実行中はユーザモードへの切り替え禁止となります。

注意 11.

指定ルーチン実行時は,トレース/ブレーク/リアルタイムRAMモニタ/タイマ計測は無効となります。

注意 12.

指定ルーチン実行時は,ノンマスカブル割り込みを常に禁止します。

注意 13.

指定ルーチン実行後にプログラムを開始する場合,マイクロコントローラの状態は次のようになります。

汎用レジスタ

プログラム停止時の状態またはユーザがで設定したレジスタ値となります。指定ルーチン実行後のレジスタ内容は反映されません。

メモリ

指定ルーチン実行後のメモリアクセスが反映されます。

周辺機能

指定ルーチン実行後のマイクロコントローラ周辺機能動作が継続します。

注意 14.

指定ルーチン内でスタックを使用する場合は,指定ルーチン内でISPを設定してください。
なお,指定ルーチン開始時のISP値は,[指定ルーチン実行機能用ワークRAM開始アドレス]に設定されます。

注意 15.

ISPについて,指定ルーチン終了時に,ISP値を指定ルーチン実行開始時の値に戻してください。

注意 16.

指定ルーチン実行機能を使用時は,端子リセットやウォッチドッグリセットをしないでください。

注意 17.

指定ルーチン実行機能を使用時は,内蔵RAM領域を無効に設定しないでください。

注意 18.

指定ルーチンを実行中は,Uフラグに“1(ユーザスタックポインタ(USP)を指定)”を設定しないでください。

注意 19.

指定ルーチン実行中は,RTFI(高速割り込みからの復帰)命令を使用しないでください。

注意 20.

指定ルーチン内で以下が発生しないようにしてください。
[ブレークポイント,ブレークイベント,トレース開始イベント/トレース終了イベント]
例えば,実行開始前に実行するルーチン内でブレークイベントが発生すると,プログラム実行開始直後にプログラムが停止します。また,指定ルーチン内でトレース開始イベントが発生すると,指定ルーチン実行中のトレースは取得されませんが,その後のプログラム実行開始からトレースが取得されることになり,期待するエミュレータ動作にならない場合があります。

注意 21.

指定ルーチン実行機能にてStartファンクションからユーザプログラムへ移行しない場合,およびStopファンクションが停止しない場合は,“START/STOP時の指定ルーチン実行処理でタイムアウトエラーが発生しました。システムリセットを発行しました。”とエラーメッセージが表示され,エミュレータを初期化してユーザ・プログラムが停止します。システムリセット発行後は,トレース記録も初期化します。なお,デバッグを継続して行うことが可能です。