マクロ(シミュレータコマンド)の使い方

Similar documents
目次 目次... 1 はじめに... 3 マイコンシミュレータのデバッグ機能... 3 スタートアップコマンドファイル... 5 シミュレータコマンド ( マクロ ) 例... 6 I/O 制御等で外的要因待ちをしている場合 ( その1)... 6 I/O 制御等で外的要因待ちをしている場合 ( そ

Notes and Points for TMPR454 Flash memory

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

Microsoft PowerPoint - CproNt02.ppt [互換モード]

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

スライド 1

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

memo

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

プレポスト【問題】

AN1526 RX開発環境の使用方法(CS+、Renesas Flash Programmer)

Notes and Points for ADuCM320 Internal Flash memory

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

国土数値情報 XML シェープ変換ツール 操作説明書 平成 23 年 7 月 国土交通省国土政策局

WLX302 取扱説明書

スライド 1

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

1. 新規プロジェクト作成の準備新規プロジェクトのためのフォルダを用意して そこにプロジェクトを作成します [ 新しいフォルダー ] をクリックして希望のフォルダに新しいフォルダを作成します この例では TrST_F401N_BlinkLD2 というフォルダを作成しました TrST_F401N_Bl

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

S1C17 Family Application Note S1C17 シリーズ PORT 多重割り込みアプリケーションノート Rev.1.0

ご注意 1) 本書の内容 およびプログラムの一部 または全部を当社に無断で転載 複製することは禁止されております 2) 本書 およびプログラムに関して将来予告なしに変更することがあります 3) プログラムの機能向上のため 本書の内容と実際の画面 操作が異なってしまう可能性があります この場合には 実

プログラミングI第10回

プログラミング基礎

スライド 1

1. 概念 STM32F4 Discovery 基板は Mini USB を接続して デバッグやプログラムの書き込みができるようになっています 通常は CPU の 0x 番地からプログラムを実行します では なぜわざわざこのプロジェクトの雛形を使用して CPU の 0x

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

スクールCOBOL2002

アプリケーションノート MT-R300 割り込みプログラムのデバッグ方法

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

リモートデバッグモードでのデバッグ 注意!! 外部 RAM を持たない CPU ボードの場合は 次項の RLL 機能を利用したリモートデバッグモードでのデバッグ をごらんください モニタの書き込みまず最初にモニタと呼ばれるプログラムをターゲットのフラッシュ ROM に書き込みます リモートデバッグ中

Python によるジオプロセシング スクリプト入門

DocuPrint 4050 PostScript ユーザーズガイド

Cコンパイラパッケージお知らせ

目次 2 1 PC Control Utility PD 1 について 動作環境

Java講座

Python によるジオプロセシング スクリプト入門

スライド 1

スライド 1

Microsoft PowerPoint - kougi4.ppt

アルファメール 移行設定の手引き Outlook2016

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

在学生向けメールサービス

Microsoft Word - プログラムをRAM.doc

CommCheckerManual_Ver.1.0_.doc

1. ボードの複数台制御 コンフィグ ROM から FPGA が起動できる場合を想定しています FPGA 回路には 特定のレジスタアドレスにプリセットしたデータが必要です 製品出荷時のサンプル FPGA 回路では レジスタ No.3 を 8bit 幅に設定し FPGA 外部の 4bit ディップスイ

スライド 1

ServerView Resource Orchestrator V3.0 ネットワーク構成情報ファイルツール(Excel形式)の利用方法

DPC-0401

TOPPERS活用アイデア・アプリケーション開発

<< 目次 >> 1 PDF コンバータのインストール ライセンスコードの入力 PDF にフォントを埋め込みたい場合の設定 PDF オートコンバータ EX で使用しない場合 PDF コンバータ単体で使用する場合の説明 PDF コンバータのアン

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

1

株式会社アルウィン C 言語コーディング規約 ver.0.1

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

SOPC Builder ペリフェラル 簡易ユーザ・ガイド - PIO (Parallel I/O)

EnSight 10.1の新機能

無線LAN JRL-710/720シリーズ ファームウェアバージョンアップマニュアル 第2.1版

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

目次 1. 回答作成手順 2 2. ツールの起動 3 3. 一般情報の入力 6 4. 成分表の入力 9 5. 依頼者情報の入力 エラーチェック XMLファイルの作成 動作設定 ( 任意 ) ( ご参考 ) 各種シートのボタン機能 ( ご参

初心者のための RL78 入門コース ( 第 3 回 : ポート出力例 2 とポート入力 ) 第 3 回の今回は, 前回作成したプログラムを RL78/G13 のハードウェアを用いて見直しをお こないます 今回の内容 8. コード生成を利用した実際のプログラム作成 ( その 2) P40 9. コー

Microsoft Word - Cプログラミング演習(10)

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

Studuino ライブラリ環境設定Windows編

TestDesign for Web

目次 1 埋め込みコードを利用したカバレッジ測定機能 P4~ 埋め込みコードを利用して計測できるカバレッジ計測の種類について P7~ カバレッジ計測が正しく実行されない例 P9~ カバレッジ計測されない原因概要 P11~ 詳細 1A 文字列型定数のアドレスが正しく渡らない場合 P14~ FMC16L

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

PowerTyper マイクロコードダウンロード手順

Sharpdesk V3.5インストレーションガイド:プロダクトキー編

目次 移行前の作業 3 ステップ1: 移行元サービス メールソフトの設定変更 3 ステップ2: アルファメール2 メールソフトの設定追加 6 ステップ3: アルファメール2 サーバへの接続テスト 11 ステップ4: 管理者へ完了報告 11 移行完了後の作業 14 作業の流れ 14 ステップ1: メー

Transcription:

マクロ ( シミュレータコマンド ) の使い方 2014 年 11 月 04 日第 1.4.0 版 - 1 -

目次 目次... 1 はじめに... 3 マイコンシミュレータのデバッグ機能... 3 スタートアップコマンドファイル... 5 シミュレータコマンド ( マクロ ) 例... 6 I/O 制御等で外的要因待ちをしている場合 ( その1)... 6 I/O 制御等で外的要因待ちをしている場合 ( その2-1)... 8 I/O 制御等で外的要因待ちをしている場合 ( その2-2)... 9 Auto 変数の変遷をテスト結果 CSV で確認する場合... 11 Auto 変数の値を変更する場合... 12 レジスタ値をテスト結果 CSV で確認する場合... 13 プログラム中で書き換えられるグローバル変数の値をテスト CSV で指定した値に変更する ( 戻す ) 場合 14 特定範囲のメモリ内容を初期化する場合... 15 特定範囲のメモリ内容を 特定範囲のメモリにコピーする場合... 15 その他の良く使うシミュレータコマンドについて... 16-2 -

シミュレータコマンドの使い方 はじめに カバレッジマスター winams は マイコンシミュレータの機能を利用してテストを実行します マイコンシミュレータにはデバッグ機能が搭載されており GUI から変数の値を参照したり 書き換えたりすることが出来ます マイコンシミュレータの機能を予めファイルに記述して デバッグ操作を自動化することが可能です 本説明書は 実際に運用で使用するケースが多いシミュレータコマンド ( マクロ ) についてご説明します 本説明書は カバレッジマスター winams(v3.6.2 以降 ) で使用するマイコンシミュレータ (XAIL V3.1.0 以降 ) を元にご説明します マイコンシミュレータのデバッグ機能 シミュレータコマンドの説明の前に マイコンシミュレータのデバッグ機能について説明します 自動実行モードを外すと テスト実行時にマイコンシミュレータが起動して デバッガ機能が使用できます ウオッチウインドウを表示 ステップ実行 ( ステップオーバー ) ボタン - 3 -

- ソースコードデバッグ機能を使用して 変数の値を書き換えたり PC( プログラムカウンタ ) を変更したりできます 1. 自動実行モードを外す : シミュレーションを自動的に開始 をオフにする 2.SystemSumulator が起動したら ファイルビュー からソースを表示 3. 対象関数にブレークポイントを置く 4. ウオッチウインドウなどを利用して 様々なデバッグ作業を行います デバッガの各機能詳細については 下記からご確認下さい [ ヘルプ ] [ シミュレータマニュアル ] [ 目次 ] [XAIL-Debugger 使用手引き ] - トレース設定をする事で MPU デバッグ情報欄にデバック状況を表示する事ができます アウトプット ビューに表示されるデバック情報 ( 実行ログ ) はカバレッジマスターのプロジェクトフォルダにログファイル (system.log) としても出力されます 1. ツール メニューから オプション を開く 2. トレース : プログラム実行時に ~ をオンにする 3. その他の設定を任意で設定する 4. ウオッチウインドウなどを利用して 様々なデバッグ作業を行います - 4 -

スタートアップコマンドファイル マイコンシミュレータで実行するシミュレータコマンドは SSTManger で指定できるスタートアップコマンドファイルに記述する事で 自動化できます スタートアップコマンドファイルに記述できるコマンドの規格 解説については 下記からご確認下さい [ ヘルプ ] [ シミュレータマニュアル ] [ 目次 ] [XAIL-Debugger 使用手引き ] [ デバッガの機能 ] [ コマンド / メッセージ ] [ デバッガカーネルのコマンド / メッセージ ] [SystemG] [ デバッガコマンド一覧 ] [ コマンドの規格 ] / [ コマンド解説 ] ; ( セミコロン ) 以降 ( 右側 ) の記述はコメントとして扱う事ができます - 5 -

シミュレータコマンド ( マクロ ) 例 I/O 制御等で外的要因待ちをしている場合 ( その 1) 関数の処理に I/O 制御でハードウェアの信号待ちを行っている while() ループがあり そのループを抜けるためには 関数実行 ( テスト ) 中に i/o ポート ( 変数 ) の値を変化させる必要があります そのような場合のマクロについて説明します サンプルソース (main.c) unsigned int *IRQ_COUNT = 0x04000000; 1:void Sample_Infinite_loop( int enable, int input ) 2:{ 3: int temp; 4: 5: if( enable ) { 6: *IRQ_COUNT = 0; 7: 8: /* スタートアップコマンドファイル :01_1.w_adif マクロで while 文を抜ける */ 9: while (*IRQ_COUNT == 0) { 10: } 11: 12: Out = input + 1; 13: } else { 14: 15: } 16:} サンプルマクロ説明 :while 文の条件になっている変数の値を変更する define/address/global ADR_ADIF = 0x04000000 ; ADR_ADIF はマクロで使用する任意の変数名 define/global COUNT = 0 ; COUNT はマクロで使用する任意の変数名 macro w_adif_v310 define/global COUNT = COUNT + 1 IF COUNT < 2 THEN goto func_end ; 2 回目にマクロが実行されると値のセットを行う ; 必要が無ければ 回数カウントの処理は入れないでも良いです store ADR_ADIF = 1 define/global COUNT = 0 func_end: ; ラベル名は任意で設定 ; IRQ_COUNT(0x04000000) が読み込まれた時にマクロ (w_adif) を実行する set do/read=0x04000000 w_adif_v310-6 -

サンプルマクロ (XAIL V3.2.0 以降 ) 説明 :while 文の条件になっている変数の値を変更する define/address/global ADR_ADIF = 0x04000000 ; ADR_ADIF はマクロで使用する任意の変数名 define/global COUNT = 0 ; COUNT はマクロで使用する任意の変数名 macro w_adif_v320 define/global COUNT = COUNT + 1 ; IF ~ THEN ~ ELSE[IF] ~ ENDIF 構文は XAIL V3.2.0 以降でサポート ; 条件式は () で括る必要があります IF (COUNT >= 2) THEN ; 2 回目にマクロが実行されると値のセットを行う ; 必要が無ければ 回数カウントの処理は入れないでも良いです store ADR_ADIF = 1 define/global COUNT = 0 ELSE ENDIF ; IRQ_COUNT(0x04000000) が読み込まれた時にマクロ (w_adif) を実行する set do/read=0x04000000 w_adif_v320-7 -

I/O 制御等で外的要因待ちをしている場合 ( その 2-1) マシン語のリターンコードが展開されている場合任意のコードが実行された後に リターンコードが展開されているコードに PC を強制的に変更します サンプルソース (main.c) 1:void Sample_Infinite_loop( int enable, int input ) 2(+ 0):{ 3(+ 1): int temp; 4(+ 2): 5(+ 3): if( enable ) { 6(+ 4): 7(+ 5):} else { 8(+ 6): 9(+ 7): /* スタートアップコマンドファイル :01_2.pass マクロで while 文を抜ける */ 10(+ 8): while (1) { 11(+ 9): if (input == 0){ 12(+10): temp = 0; 13(+11): } else { 14(+12): temp = input * 2; 15(+13): } 16(+14): input = temp +1; 17(+15): } 18(+16): } 19(+17):} 逆アセンブルコード表示 (19 行目 ) RTS NOP サンプルマクロ説明 : 強制的に PC( プログラムカウンタ ) を変更する macro pass set reg pc = main\#19 ; 関数内行オフセットは使用出来ません ; Sample_Infinite_loop の +14 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (pass) を実行する set do/aexec=main\sample_infinite_loop\#+14 pass - 8 -

I/O 制御等で外的要因待ちをしている場合 ( その 2-2) マシン語のリターンコードが展開されていない場合 PC を強制的に変更しても リターンコードがない為 関数を終了する事が出来ません その為 テスト対象関数の実行 ( 初期設定終了アドレスの実行 ) 前に 戻り位置を記録し テスト対象関数の実行後に その戻り位置に戻すことで テストを完了させます マクロだけでは対応出来ませんので ダミーソースの追加コンパイル リンクおよび初期設定終了アドレスの変更が必要になります ( 本処理対応前の初期設定終了アドレスは main と仮定して説明します ) サンプルソース (main.c) 1:void Sample_Infinite_loop( int enable, int input ) 2(+ 0):{ 3(+ 1): int temp; 4(+ 2): 5(+ 3): if( enable ) { 6(+ 4): 7(+ 5):} else { 8(+ 6): 9(+ 7): /* スタートアップコマンドファイル :01_2.pass マクロで while 文を抜ける */ 10(+ 8): while (1) { 11(+ 9): if (input == 0){ 12(+10): temp = 0; 13(+11): } else { 14(+12): temp = input * 2; 15(+13): } 16(+14): input = temp +1; 17(+15): } 18(+16): } 19(+17):} ダミーソース (dummy.c) 1:#include <setjmp.h> 2: 3:void dummy_setjmp(void); 4:void dummy_main(void); 5:void dummy_longjmp(void); 6: 7:int dummy; 8:jmp_buf env; 9: 10:void dummy_setjmp(void) 11(+ 0):{ 12(+ 1): 13(+ 2): dummy = 1; // main 関数実行時に PC を強制変更 14(+ 3): 15(+ 4): setjmp(env); // 戻り位置を記録 16(+ 5): 17(+ 6): dummy_main(); // 初期設定終了アドレスにする 18(+ 7): 19(+ 8):} 20: - 9 -

ダミーソース (dummy.c 続き ) 21:void dummy_main(void) 22(+ 0):{ 23(+ 1): 24(+ 2): dummy = 1; 25(+ 3): 26(+ 4):} 27: 28:void dummy_longjmp(void) 29(+ 0):{ 30(+ 1): 31(+ 2): dummy = 1; 32(+ 3): 33(+ 4): longjmp(env, 1); // setjmp が実行された位置に戻る 34(+ 5): 35(+ 6):} サンプルマクロ説明 : 初期設定終了アドレスの実行前の位置を記録して テスト対象関数実行後に その位置に戻します macro setjmp set reg pc = dummy\#13 ; 関数内行オフセットは使用出来ません ; 初期設定終了アドレスを dummy_main ; に変更する必要があります ; main.c / 関数 :main の +0 行目に展開されるマシンコードの 1 バイト目が実行される前に ; マクロ (setjmp) を実行する set do/bexec=main\main\#+0 setjmp macro longjmp set reg pc = dummy\#31 ; 関数内行オフセットは使用出来ません ; main.c / 関数 :Sample_Infinite_loop の +14 行目に展開されるマシンコードの 1 バイト目が実 ; 行された時にマクロ (longjmp) を実行する set do/aexec=main\sample_infinite_loop\#+14 longjmp - 10 -

Auto 変数の変遷をテスト結果 CSV で確認する場合 Auto 変数の内容をスタブファイルに定義したグローバル変数に保存して その内容をテスト結果 CSV ファイルで確認する場合のマクロについて説明します サンプルソース (main.c) 1: typedef struct { 2: unsigned char value_a; 3: unsigned int value_b; 4:} InfoType_A; 5: 6:/* Auto 変数退避用変数 ( 運用時にはスタブファイルに追加 ) */ 7:static char Macro_Symbol; 8:static char Macro_Symbol2; 9: 10:void Sample_AutoVariables_Evacuation(void) 11(+ 0):{ 12(+ 1): InfoType_A InfoPtr[5]; 13(+ 2): 14(+ 3): InfoPtr[0].value_a = 1; 15(+ 4): /* スタートアップコマンドファイル :02_1.mymacro マクロで Auto 変数の値を退避 */ 16(+ 5): InfoPtr[0].value_b = 1; 17(+ 6): 18(+ 7): InfoPtr[0].value_a = 2; 19(+ 8): /* スタートアップコマンドファイル :02_2.mymacro2 マクロで Auto 変数の値を退避 */ 20(+ 9): InfoPtr[0].value_b = 2; 21(+10): 22(+11):} サンプルマクロ説明 :Auto 変数の値をグローバル変数に退避する マイコンに依っては Auto 変数をそのまま利用できない場合もあります macro mymacro ; プログラムで定義されている変数 (Macro_Symbol) に Auto 変数 (InfoPtr[0].value_a) の値を設定する STORE/Synchronize Macro_Symbol= InfoPtr[0].value_a ; Sample_AutoVariables_Evacuation の +5 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (mymacro) を実行する set do/aexec=main\sample_autovariables_evacuation\#+5 mymacro macro mymacro2 ; プログラムで定義されている変数 (Macro_Symbol2) に Auto 変数 (InfoPtr[0].value_a) の値を設定する STORE/Synchronize Macro_Symbol2= InfoPtr[0].value_a ; Sample_AutoVariables_Evacuation の +9 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (mymacro2) を実行する set do/aexec=main\sample_autovariables_evacuation\#+9 mymacro2-11 -

Auto 変数の値を変更する場合 Auto 変数にスタブファイルで定義したグローバル変数の値を設定する場合のマクロについて説明します グローバル変数の値はテスト CSV で指定します サンプルソース (main.c) 1:typedef struct { 2: unsigned char value_a; 3: unsigned int value_b; 4:} InfoType_A; 5: 6:/* Auto 変数設定用変数 ( 運用時にはスタブファイルに追加 ) */ 7:static char Auto_Symbol; 8: 9:int Sample_AutoVariables_Set(void) 10(+ 0):{ 11(+ 1): InfoType_A InfoPtr[5]; 12(+ 2): int ret; 13(+ 3): 14(+ 4): InfoPtr[0].value_a = 1; 15(+ 5): /* スタートアップコマンドファイル :05_1.Set_AutoVariables マクロで Auto 変数の値を変更 */ 16(+ 6): InfoPtr[0].value_b = 1; 17(+ 7): 18(+ 8): if (InfoPtr[0].value_a == 1){ 19(+ 9): ret = -1; 20(+10): } else { 21(+11): ret = InfoPtr[0].value_a; 22(+12): } 23(+13):} サンプルマクロ説明 : グローバル変数の値を Auto 変数に設定する マイコンに依っては Auto 変数をそのまま利用できない場合もあります macro Set_AutoVariables ; プログラムで定義されている変数 (Auto_Symbol) の値を Auto 変数 (InfoPtr[0].value_a) に設定する STORE/Synchronize InfoPtr[0].value_a = Auto_Symbol ; 関数 :Sample_AutoVariables_Set の +6 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (Set_AutoVariables) を実行する set do/aexec=main\sample_autovariables_set\#+6 Set_AutoVariables - 12 -

レジスタ値をテスト結果 CSV で確認する場合 レジスタの内容をスタブファイルに定義したグローバル変数に保存して その内容をテスト結果 CSV ファイルで確認する場合のマクロについて説明します サンプルソース (main.c) 1:static char Before_Register; 2:static char After_Register; 3: 4:/* Register 退避用変数 ( 運用時にはスタブファイルに追加 ) */ 5:void Sample_Register_Evacuation(void) 6(+ 0):{ 7(+ 1): /* スタートアップコマンドファイル :03_1.b_reg マクロでレジスタの値を退避 */ 8(+ 2): InfoType_A InfoPtr[5]; 9(+ 3): 10(+ 4): InfoPtr[0].value_a = 1; 11(+ 5): InfoPtr[0].value_b = 1; 12(+ 6): 13(+ 7): /* スタートアップコマンドファイル :03_2.a_reg マクロでレジスタの値を退避 */ 14(+ 8):} サンプルマクロ説明 : レジスタの値をグローバル変数に退避する macro b_reg ; プログラムで定義されている変数 (Before_Register) に R1 レジスタの値を設定する STORE/Synchronize Before_Register= %R1 ; Sample_Register_Evacuation の +0 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (b_reg) を実行する set do/aexec=main\sample_register_evacuation\#+0 b_reg macro a_reg ; プログラムで定義されている変数 (After_Register) に R1 レジスタの値を設定する STORE/Synchronize After_Register= %R1 ; Sample_Register_Evacuation の +8 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (a_reg) を実行する set do/aexec=main\sample_register_evacuation\#+8 a_reg - 13 -

プログラム中で書き換えられるグローバル変数の値をテスト CSV で指定した値に変更する ( 戻す ) 場合 テスト CSV で値を設定しても プログラムで直ぐに値が変更される場合に テスト CSV の値 ( グローバル変数 ) を退避して プログラムで該当変数が変更された直後に テスト CSV の値に戻す場合のマクロについて説明します サンプルソース (main.c) 1:int GlobalA; 2:int Sample_Global_Set( void ) 3(+ 0):{ 4(+ 1): int rtn = 0; 5(+ 2): 6: /* スタートアップコマンドファイル :04_1.Evacuation_Variables マクロで GlobalA を退避 */ 7(+ 4): GlobalA = 0 ; // グローバル変数クリア 8(+ 5): 9(+ 6): /* スタートアップコマンドファイル :04_2. Set_Variables マクロで GlobalA を設定 */ 10(+ 7): while ( GlobalA == 0 ); // グローバル変数がセットされるまで待つ 11(+ 8): 12(+ 9): if ( GlobalA == 99 ){ // セットされたグローバル変数から戻り値を設定 13(+10): rtn = 1 ; 14(+11): } else { 15(+12): rtn = 2 ; 16(+13): } 17(+14): 18(+15): return ( rtn ) ; 19(+16):} サンプルマクロ説明 : グローバル変数の値を退避して その値を戻す define/global Evacuation = 0 ; Evacuation はマクロで使用する任意の変数名 macro Evacuation_Variables ; プログラムで定義されている変数 (GlobalA) の値を Evacuation に設定する define/global Evacuation = GlobalA ; Sample_Global_Set の +4 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (Evacuation_Variables) を実行する set do/aexec=main\sample_global_set\#+4 Evacuation_Variables macro Set_Variables ; Evacuation の値をプログラムで定義されている変数 (GlobalA) に設定する store GlobalA = Evacuation ; Sample_Global_Set の +7 行目に展開されるマシンコードの 1 バイト目が実行された時に ; マクロ (Set_Variables) を実行する set do/aexec=main\sample_global_set\#+7 Set_Variables - 14 -

特定範囲のメモリ内容を初期化する場合 特定範囲のメモリ内容を任意の値で初期化するマクロについて説明します サンプルマクロ説明 : 指定した範囲のメモリ内容に任意の値を設定する FILL MEMORY 0x2000#0x1000 = 0xff ; XAIL V3.0.1 以降 特定範囲のメモリ内容を 特定範囲のメモリにコピーする場合 特定範囲のメモリ内容を 特定範囲のメモリにコピーするマクロについて説明します ブートローダーを使って RAM 上で動作するプログラムを ROM から RAM へ展開するような場合などに利用します サンプルマクロ説明 : 指定した範囲のメモリ内容を指定した範囲のメモリにコピーする COPY MEMORY 0x2000#0x3000 0xff2000 ; XAIL V3.0.1 以降 - 15 -

その他の良く使うシミュレータコマンドについて ここまでの説明以外に良く使用するシミュレータコマンドについて説明します サンプルマクロ start log/all ; ユーザがコマンドウィンドウから実行したデバッガコマン ; ドおよびウィンドウに表示されるすべてのデータをログフ ; ァイルへ書き込みます ; シュミレーション実行後のログファイルは カバレッジマ ; スターのテストプロジェクトフォルダに systemg.log の ; 名称で保存されます on error then continue ; マクロ実行中にエラーが生じたときに GO コマンドと STEP コ ; マンドの次のデバッガコマンドを実行します set unit/all ; すべてのユニットについて シンボル情報を設定するよう ; に指定します @reset ; リセット状態にします ( パワーオンリセット ) assign/read/write 0x04000000:0x04ffffff set reg pc = 0xffffffff set mode source set trace/subroutine=yes/display ; メモリのアサインを行います ; プログラムカウンタを設定します ; ソースウィンドウにソースファイルを表示します ; プログラムの実行トレースを実施します ; ログファイルにも保存されます ; マクロまたはコマンドプロシジャ内から実行される各デバッガコマンドをシミュレータのコマンドウィンド ; ウに表示するようにします (SET VERIFY コマンドより後のコマンドから表示します ) ; 作成したマクロが実行されているかどうか確認する時に使います SET VERIFY - 16 -

シミュレータコマンドの使い方 会社名 商品名は各社の商標または登録商標です 本資料の無断転載 複写は禁止しております ガイオ テクノロジー株式会社 ユーザーサポートのご案内 http://www.gaio.co.jp/support/support_about.html 使用方法に関する問い合わせ方法ご質問は ユーザーサポート窓口 (user@gaio.co.jp) までご連絡下さい ユーザーサポート窓口への質問には ユーザー ID が必要です お問い合わせの際に ユーザー ID をお知らせください 保守契約がない場合は いかなるサポートも提供致しません - 17 -