62
PRACTICEスクリプト Takahito Kagawa [email protected] April/ 8 / 2019

chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO [] スクリプト内もしくは、コマンドラインからスクリプトを実行

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

PRACTICEスクリプト

Takahito Kagawa • [email protected] • April/ 8 / 2019

Page 2: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

2 / 62April/8/2019

PRACTICEスクリプト

• TRACE32 PowerViewデバッガGUI内で動作するコマンドスクリプト

• デバッガ内で実施する一連のコマンドをひとまとまりにマクロ化

• Flashプログラミングスクリプト

• 条件文、サブルーチン

• カスタムダイアログ

Page 3: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

3 / 62April/8/2019

Agenda

• 準備する環境

• コマンド実行のスクリプト化(バッチ処理化)

• コマンド実行のフロー制御

• カスタムダイアログ

• 使用環境に合わせたスクリプティング

• Pythonとの連携

Page 4: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

4 / 62April/8/2019

準備する環境

• ホストパソコンとテキストエディタ

• インストラクションセットシミュレータ

• PowerDebugモジュール、デバッグプローブ、および+ターゲットボード

Page 5: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

5 / 62April/8/2019

準備する環境

• サンプルスクリプト

C:/T32/demo/practice

C:/T32/demo/<arch>

• 参照マニュアルC:/T32/PDF/training_practice.pdf

C:/T32/PDF/general_func.pdf

C:/T32/PDF/ide_ref.pdf

C:/T32/PDF/ide_user.pdf

C:/T32/PDF/ide_func.pdf

Page 6: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

6 / 62April/8/2019

準備する環境 (外部エディタとの連携)

• 例:KDE KATE

SETUP.EDITEXT ON "C:¥Program Files¥Kate¥bin¥kate.exe ""*""“

• メニューバー [ファイル(F)]->[開く(O)…]から

外部エディタでファイルを開く

Page 7: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

7 / 62April/8/2019

準備する環境 (外部エディタ用拡張機能)

• 外部エディタ用のPRACTICEシンタックスハイライト機能

• KATE, Notepad++, Textpad, Ultraedit, Vim

Page 8: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

8 / 62April/8/2019

準備する環境 (シンタックスハイライト)

• 例:KDE KATE

Page 9: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

9 / 62April/8/2019

Agenda

• 準備する環境

• コマンド実行のスクリプト化(バッチ処理化)

• コマンド実行のフロー制御

• カスタムダイアログ

• 使用環境に合わせたスクリプティング

• Pythonとの連携

Page 10: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

10 / 62April/8/2019

実施コマンドのマクロ化 (コマンド:LOG.OPEN)

• メニュー、ボタン操作を含む、すべてのコマンドログ

コマンド:LOG.OPEN C:/T32/sample_log.cmm ; 記録の開始

コマンド:LOG.TYPE ; 内容の表示

Page 11: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

11 / 62April/8/2019

現在の設定状態をコマンド化(コマンド:ClipSTOre, STOre)

• ClipSTOre:現在の各設定状態をコマンド化し、クリップボードへ

コマンド:ClipSTOre SYStem ; SYStem設定をコマンド化

コマンド:ClipSTOre Break ; ブレークポイント設定をコマンド化

コマンド:ClipSTOre Win ; ウィンドウの配置をコマンド化

Page 12: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

12 / 62April/8/2019

現在の設定状態をコマンド化(コマンド:ClipSTOre, STOre)

SYSTEM.RESET

SYSTEM.CPU SPC56EC74

SYSTEM.CONFIG CORENUMBER 2.

SYSTEM.CONFIG CORE 1. 1.

CORE.ASSIGN 1.

SYSTEM.MEMACCESS NEXUS

SYSTEM.CPUACCESS DENIED

SYSTEM.OPTION IMASKASM OFF

SYSTEM.OPTION IMASKHLL OFF

SYSTEM.BDMCLOCK 4000000.

SYSTEM.CONFIG TRISTATE OFF

SYSTEM.CONFIG SLAVE OFF

SYSTEM.CONFIG TAPSTATE 7.

SYSTEM.CONFIG TCKLEVEL 0.

SYSTEM.CONFIG.DEBUGPORT Analyzer0

SYSTEM.CONFIG CJTAGFLAGS 0x3

SYSTEM.MODE UP

コマンド:ClipSTOre SYStem

Page 13: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

13 / 62April/8/2019

現在の設定状態をコマンド化(コマンド:ClipSTOre, STOre)

コマンド:STOre C:/T32/sample.cmm SYStem

設定コマンドを sample.cmmファイルに出力

Page 14: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

14 / 62April/8/2019

現在の設定状態をコマンド化(コマンド:ClipSTOre, STOre)

コマンド:ClipSTOre / STOre

ALL | BookMark | Break | BSDL | DIS | FLASH | GROUP |

HELP | HISTory | MAP | MARKER | PATH | PBREAK |

PERF | Register | SPATH | Synch | SYStem | TRANSlation

Page 15: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

15 / 62April/8/2019

Agenda

• 準備する環境

• コマンド実行のスクリプト化(バッチ処理化)

• コマンド実行のフロー制御

• カスタムダイアログ

• 使用環境に合わせたスクリプティング

• Pythonとの連携

Page 16: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

16 / 62April/8/2019

スクリプトの構成要素

• コメント

• 行頭に // もしくは、; (セミコロン)

※ // が好ましい• コマンド

• デバッガ内で使用できるすべてのコマンド

• 関数

• ターゲットの状態やデバッグツールの状態を読出し

• 演算子

• +,-,*,/

• ラベル

• スクリプト内にサブルーチンを設置する際に使用

Page 17: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

17 / 62April/8/2019

Conditional Program Execution

• IF-ELSE

<condition>が真のとき<if_block>を実行し、そうではないとき、<else_block>を実行

IF <condition>

(

<if_block>

)

ELSE

(

<else_block>

)

Page 18: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

18 / 62April/8/2019

Conditional Program Execution

• Var.IF (※シンボル情報を読み込ませている場合に利用可能)

<condition>が真のとき<if_block>を実行し、そうではないとき、<else_block>を実行

Var.IF <hll_condition>

(

<if_block>

)

ELSE

(

<else_block>

)

Page 19: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

19 / 62April/8/2019

Conditional Program Execution

• Var.WHILE (※シンボル情報を読み込ませている場合に利用可能)

<hll_condition>が真のとき<block>を実行

Var.WHILE <hll_condition>

(

<block>

)

Page 20: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

20 / 62April/8/2019

Conditional Program Execution

• RePeaT

<count>回数分、<command> もしくは <block>を繰り返し実行。

RePeaT <count> <command>

-------------------------------------------

RePeaT <count>

(

<block>

)

-------------------------------------------

RePeaT

(

<block>

) WHILE <condition>

Page 21: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

21 / 62April/8/2019

サブルーチンの呼び出し

• GOSUB <label> [<parameter_list>]

パラメータ(オプション)とともに、<label>のサブルーチンを呼び出し

GOSUB <label> [<parameter_list>]

ENDDO

<label>

(

<block>

RETURN

)

[注意]

label は、必ず行の先頭から開始し、末尾は” : “ とします。スペースは置かない。

Page 22: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

22 / 62April/8/2019

GOTO と JUMPTO

• GOTO <label>

スクリプト実行が<label>にて続行

<label>は、その時点で実行しているスクリプト内のみが対象

• JUMPTO <label>

スクリプト実行が<label>にて続行

<label>は、PRACTICEスクリプトのスタック上に配置

Page 23: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

23 / 62April/8/2019

JUMPTO

// Script test_sequence.cmm

DO target_setup.cmm

DO check_boot.cmm

ENDDO

terminate_script:

(

DIALOG.OK "Script terminated by test failure"

ENDDO

)

// Script check_boot.cmm

//

Go main

WAIT !STATE.RUN() 2.s

IF STATE.RUN()

(

Break.direct

)

IF Register(PC)==ADDRESS.OFFSET(main)

(

APPEND test_protocol.txt FORMAT.STRing("System booted successfully",70.,' ') ¥

FORMAT.UnixTime("c",DATE.UnixTime(),DATE.utcOffSet())

)

ELSE

(

APPEND test_protocol.txt FORMAT.STRing("Booting failed",70.,' ') ¥

FORMAT.UnixTime("c",DATE.UnixTime(),DATE.utcOffSet())

JUMPTO terminate_script

)

Page 24: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

24 / 62April/8/2019

スクリプトの呼び出し

• DO <script> [<parameter_list>]

スクリプト内もしくは、コマンドラインからスクリプトを実行

// Script test_sequence.cmm

DO target_setup.cmm

DO check_boot.cmm

ENDDO

terminate_script:

(

DIALOG.OK "Script terminated by test failure"

ENDDO

)

Page 25: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

25 / 62April/8/2019

スクリプト内変数 (PRIVATE, LOCAL, GLOBAL)

• PRIVATE --- PRIVATE変数の生成

• PRIVATEで宣言された変数は、生成されたスクリプト内、サブルーチンやブロック内で参照可能。

• スクリプト、サブルーチンやブロックが終了した時点で消去。

• ネスト上のブロックからも参照可能だけれども、呼び出されたサブルーチンやスクリプト内では参照できない。

Page 26: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

26 / 62April/8/2019

スクリプト内変数 (PRIVATE, LOCAL, GLOBAL)

• LOCAL --- LOCAL変数の生成

• LOCALで宣言された変数は、生成されたスクリプト内、サブルーチンやブロック内で参照可能。

• スクリプト、サブルーチンやブロックが終了した時点で消去。

• ネスト上のブロックおよび、呼び出されたサブルーチンやスクリプト内でも参照可能。

Page 27: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

27 / 62April/8/2019

スクリプト内変数 (PRIVATE, LOCAL, GLOBAL)

• GLOBAL --- GLOBAL変数の生成

• GLOBALで宣言された変数は、全てのスクリプト、サブルーチンやブロック内で参照可能。

• PMACRO.RESetコマンドで、明示的に消去されるまで参照可。

• 動作しているスクリプトがない場合にのみ消去可能。

Page 28: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

28 / 62April/8/2019

Agenda

• 準備する環境

• コマンド実行のスクリプト化(バッチ処理化)

• コマンド実行のフロー制御

• カスタムダイアログ

• 使用環境に合わせたスクリプティング

• Pythonとの連携

Page 29: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

29 / 62April/8/2019

シンプルダイアログとカスタムダイアログ

• シンプルダイアログ

• ユーザに対し何か情報を伝えたり、簡単な選択を促す

• カスタムダイアログ

• プルダウンメニュー、プッシュボタン、選択ボタン、ファイル参照など、自由に設置可能

Page 30: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

30 / 62April/8/2019

シンプルダイアログ

• DIALOG.MESSAGE “<text>”

標準的なダイアログをメッセージとともに表示

(with インフォメーションマーク)

• DIALOG.OK “<text>”

標準的なダイアログをメッセージとともに表示

(with エクスクラメーションマーク)

• DIALOG.YESNO “<text>”

Yes/No選択ダイアログをメッセージとともに表示

Page 31: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

31 / 62April/8/2019

カスタムダイアログ

• 所望のインターフェースに合わせて、複雑なダイアログの作成が可能

• 設置可能なコンポーネント

Checkbox, Choosebox, Listbox, Edit, Pulldown,簡単なアニメーション等々

Page 32: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

32 / 62April/8/2019

カスタムダイアログ (位置調整)

• POS [<x>] [<y>] [<width>] [<height>]

次に続くダイアログコンポーネントをダイアログウィンドウ上のどこに配置するかを定義

<x> 0 ~ 16383.5 の間で、0.5単位ごとに指定可能

<y> 0 ~ 8191.75 の間で、0.25単位ごとに指定可能

<width> 0 ~ 16383.5 の間で、0.5単位ごとに指定可能

<height> 0 ~ 8191.75 の間で、0.25単位ごとに指定可能

Page 33: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

33 / 62April/8/2019

カスタムダイアログ (位置調整)

• POS [<x>] [<y>] [<width>] [<height>]

Page 34: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

34 / 62April/8/2019

カスタムダイアログ (コンポーネント属性の設定)

• 各ダイアログコンポーネントの有効/無効

• ユーザー入力や各コンポーネントの状態を展開

• ラベルを使ってコンポーネントに値を設定

• 各コンポーネントの状態を設定

Page 35: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

35 / 62April/8/2019

カスタムダイアログ (コンポーネント属性の設定)

• 各ダイアログコンポーネントの有効/無効

DIALOG.Enable <lable> :<label>に関連するコンポーネントを有効化

DIALOG.Disable <label>:<label>に関連するコンポーネントを無効化

Page 36: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

36 / 62April/8/2019

カスタムダイアログ (コンポーネント属性の設定)

• 各ダイアログコンポーネントからのデータ採取

DIALOG.STRing(<lable>), DIALOG.STRing2(<label>)

:<label>に関連するコンポーネントからデータを採取

Page 37: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

37 / 62April/8/2019

カスタムダイアログ (コンポーネント属性の設定)

• 各ダイアログコンポーネントへの値の設定

DIALOG.Set <label> <value>

:<label>に関連するコンポーネントに<value>を設定

Page 38: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

38 / 62April/8/2019

カスタムダイアログ (コンポーネント属性の設定)

• 各ダイアログコンポーネントのコマンドの実行

DIALOG.EXecute <label>

:<label>に関連するコンポーネントのコマンドを実行

Page 39: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

39 / 62April/8/2019

カスタムダイアログ (ファイル、ディレクトリ参照)

• ファイルおよびディレクトリブラウジングコマンド

DIALOG.DIR <directory_name>:

ディレクトリ名を選ぶためのダイアログボックス。

<directory_name> にはワイルドカード(*)が必須。

DIALOG.File <file_name>:

ファイルを選ぶためのダイアログボックス。

<file_name> にはワイルドカード(*)が必須。

DIALOG.File.SAVE <file_name>:

Page 40: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

40 / 62April/8/2019

カスタムダイアログ (参考資料)

• C:/T32/PDF/training_practice.pdf の「Dialog Programming」の項

• C:/T32/PDF/ide_user.pdf の「Dialog Programming」の項

• C:/T32/demo/practice/dialogs フォルダのサンプルスクリプト

Page 41: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

41 / 62April/8/2019

Agenda

• 準備する環境

• コマンド実行のスクリプト化(バッチ処理化)

• コマンド実行のフロー制御

• カスタムダイアログ

• 使用環境に合わせたスクリプティング

• Pythonとの連携

Page 42: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

42 / 62April/8/2019

使用環境に合わせたスクリプティング

• ホストパソコンのディレクトリ構造の違い

• ホストパソコンのOSの違い

• デバッグツールハードウェアの違い

• ターゲットCPUやターゲットボードの違い

• TRACE32のバージョンの違い

• TRACE32の設定の違い

これらの違いを吸収するようなスクリプティング

Page 43: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

43 / 62April/8/2019

ディレクトリパス

• [Function] OS.PresentWorkingDirectory()

ワーキングディレクトリ名を文字列で取得

PRIVATE &pwd

&pwd=OS.PresentWorkingDirectory()

ChDir "C:¥users¥rico¥Project_1¥out"

Data.LOAD.Elf "myprog.elf"

ChDir "&pwd"

Page 44: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

44 / 62April/8/2019

ディレクトリパス

• [Function] OS.PresentPracticeDirectory()

PRACTICEスクリプトのディレクトリ名を文字列で取得

PRIVATE &ppd

&ppd=OS.PresentPracticeDirectory()

Data.LOAD.Elf “&ppd/myprog.elf"

Page 45: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

45 / 62April/8/2019

ディレクトリパス

• [Function] OS.FILE(<filename>)

ファイルが存在すれば TRUE を返すPRIVATE &ppd &file&ppd=OS.PresentPracticeDirectory()&file="&ppd"+"¥myprog.elf"IF OS.FILE("&file")==TRUE()

Data.LOAD.Elf "&file"ELSE(

&file="&ppd"+"¥out¥myprog.elf"IF OS.FILE("&file")==TRUE()

Data.LOAD.Elf "&file"ELSE

Data.LOAD.Elf "*.elf")

Page 46: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

46 / 62April/8/2019

ビルトインファイルシステム操作コマンド

• スクリプト内で使えるファイル操作コマンド

REN <filename>:ファイル名の変更

COPY <source> <destination>:ファイルのコピー

MKDIR <pathname>:ディレクトリの作成

RMDIR <pathname>:ディレクトリの削除

ZIP <source> [<destination>]:ファイルの圧縮

その他のコマンド:C:/T32/PDF/ide_user.pdfの “File and Folder Operations”

Page 47: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

47 / 62April/8/2019

ビルトインファイルシステム操作コマンド

• スクリプト内で使えるファイル操作コマンド

; Windowsホストのみで動作するコマンドCOPY C:¥t32¥config.t32 C:¥t32¥config-usb.t32

;Linux もしくは MacOSのみで動作するコマンドCOPY /opt/t32/config.t32 /opt/t32/config-usb.t32

;どのホストでも動作するコマンドCOPY "~~/config.t32" "~~/config-usb.t32"

Page 48: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

48 / 62April/8/2019

デバッグハードウェア

• デバッグツールのハードウェア構成を識別するための関数

[Function] AUTOFOCUS()

[Function] hardware.POWERDEBUG()

[Function] hardware.POWERTRACE2()

[Function] INTERFACE.SIM()

[Function] ID.CABLE()

関数一覧:C:/T32/PDF/general_func.pdf

Page 49: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

49 / 62April/8/2019

デバッグハードウェア

• デバッグツールのハードウェア構成を識別するための関数

; デバッグプローブのIDを表示PRINT ID.CABLE()

; もしシミュレータだったら…

IF INTERFACE.SIM()

(

DIALOG.OK "Simulator mode not supported by this script." ¥

"Press ’OK’ to exit the script."

ENDDO

)

Page 50: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

50 / 62April/8/2019

ターゲットCPU

• ターゲットCPUファミリや型番によって区分け

[Function] CPUFAMILY():コアアーキテクチャファミリ

[Function] CPU():”SYStem.CPU”で指定した型番を表示

IF CPUFAMILY()=="ARM"

(

IF CABLE.TWOWIRE()

SYStem.CONFIG SWD

)

Page 51: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

51 / 62April/8/2019

ターゲットCPU

• デバイスIDによって区分け

“SYStem.DETECT IDCODE”コマンドでIDコードの読み出し、その値をもとに設定を変更

LOCAL &deviceSYStem.RESetSYStem.CPU ARM7TDMI ; Default CPUSYStem.DETECT IDCode ; IDコードの読み出し

&device=IDCODE(0)&0x0fffffffIF &device==0x0B95C02F // TI OMAP4430 (

SYStem.CPU OMAP4430APP1SYStem.CONFIG CTIBASE 0xd4148000SYStem.Mode Up

)ELSE IF &device==0x049220DD // Altera Excalibur(

SYStem.CPU EPXASYStem.Mode UpData.Set C15:00000001 %LE %Long 0x0178

)ELSE(

PRINT %ERROR "Don't know device 0x" %Hex &device

ENDDO)

Page 52: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

52 / 62April/8/2019

TRACE32 PowerView (GUI)のバージョン

• デバッガソフトウェアのビルドバージョンの読み出し

[Function] VERSION.BUILD()

TRACE32のビルド番号

[Function] VERSION.BUILD.BASE()

TRACE32のベースビルド番号

IF VERSION.BUILD()<56572.

(

DIALOG.OK "This script requires TRACE32 build greater than 56572."

ENDDO

)

Page 53: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

53 / 62April/8/2019

TRACE32 PowerView (GUI)のバージョン

Page 54: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

54 / 62April/8/2019

エラーハンドリング

• スクリプト実行中に発生する可能性をふまえた記述 (ON ERROR)

; Enable error handler;ON ERROR GOSUB(; Tell the user that the file wasn’t loaded and ask them to browse; for its correct location.

PRINT "File not found."Data.LOAD.Elf *RETURN

)

; Execute a command that will failData.LOAD.Elf "non_existent_file.elf"

; Restore previous error handlerON ERROR inheritENDDO

Page 55: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

55 / 62April/8/2019

カスタムコマンド

• 独自コマンドの定義

[Command] GLOBALON CoMmanD <name> DO <script>

<name>で指定した名称で、DO に続けて指定したスクリプトを実行させることが可能。

<name>で指定できる名称の長さは、9文字以内。

Page 56: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

56 / 62April/8/2019

カスタムコマンド (例:custom_command.cmm)PARAMETERS &test &testfile &countIF "&test"==""(; No arguments so register the commandLOCAL &this_script&this_script=OS.PresentPracticeFile()GLOBALON CoMmanD TESTRUN DO "&this_script"

)ELSE IF "&test"=="REMOVE"(; Use this to remove the global commandGLOBALON CoMmanD TESTRUN

)ELSE(RePeaT &count(GOSUB &test "&testfile"

))ENDDO

test1:PARAMETERS &tfPRINT "Running test1 with data file (&tf)"RETURN

test2:PARAMETERS &tfPRINT "Running test2 with data file (&tf)"RETURN

DO custom_command.cmmTESTRUN "test1" "testdata1.txt" "0x10"TESTRUN "test2" "testdata2.txt" "0x03“

; Call the script again to remove the commandDO custom_command.cmm "REMOVE"ENDDO

Page 57: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

57 / 62April/8/2019

Pitfalls

• STOPと ENTRYコマンド

• 停止している理由が何も表示されない

• IFとWHILEコマンドの直後の空白

• その他の表現では空白は不要

【正】IF (&i<5.)

【誤】IF(&i<5.)

【正】&x=(5.+8.*2.)/(3/+&i)

【誤】&x = ( 5. + 8. * 2 ) / ( 3 + &i )

Page 58: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

58 / 62April/8/2019

Pitfalls

• ファイル名の指定に関数が含まれてはならない

• 値を指定する際、値の表現を0x10 や 16. というように明確に指定する

• ディレクトリパスの表現は、OS.PPD(), OS.PWDを使う

• TRACE32に組み込まれているファイル操作コマンドを使う

【正】&dir=STRing.TRIM("&dir")Data.LOAD.Elf "&dir/myprog.elf“

【誤】Data.LOAD.Elf STRing.TRIM("&dir")+"/myprog.elf"

Page 59: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

59 / 62April/8/2019

Agenda

• 準備する環境

• コマンド実行のスクリプト化(バッチ処理化)

• コマンド実行のフロー制御

• カスタムダイアログ

• 使用環境に合わせたスクリプティング

• Pythonとの連携

Page 60: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

60 / 62April/8/2019

PowerViewを Pythonからコントロール

• TRACE32 Remote API を介し、TRACE32 PowerViewを操作

• Python以外にも、C, C#, .NET, VBA用のAPI

Page 61: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

61 / 62April/8/2019

PowerViewを Pythonからコントロール

• [マニュアル] C:/T32/PDF/app_python.pdf

• [サンプル] C:/T32/demo/api/python

python t32apimenu.py python t32_run_script.py

Page 62: chap4 practice 20190408 - Fujisetsubi...JUMPTO terminate_script) April/8/2019 24 / 62 スクリプトの呼び出し • DO  [] スクリプト内もしくは、コマンドラインからスクリプトを実行

Takahito Kagawa • [email protected] • April / 8 / 2019