こんにちは。
ハギと申します。
RX Simulatorでコマンドラインからプロジェクトを実行することは可能なのでしょうか。
最終的にやりたいことは、「Github Actionsを使ってGithubにpushをしたら、self hosted環境でユニットテストを自動で実行する」というようなことです。
現在、GUIのe2studioのRX Simulator環境でユニットテストを行い、Renesas Debug Virtual Consoleに結果を表示するということはできています。
また、コマンドラインでビルドは以下のページによると可能とのこと。
https://ja-support.renesas.com/knowledgeBase/17797621
よって、後はコマンドラインからテストの実行さえできればやりたいことができそうな気がしていますが、このようなことは可能なのでしょうか。
ハギさん、こんにちは。NoMaYです。コマンドライン版CS+の方ですが、まずはIronPythonスクリプト側を出来るだけ簡素にして予めGUI版CS+でお膳立てした設定(mtpjでは無くてmtudに設定が格納されます)を使用する方法でやってみました。次はIronPythonスクリプト側で全ての設定を行う方法をやってみます。(その後でデバッグ専用プロジェクトについてもやります。)以下、画面コピーです。
ハギさん、こんにちは。NoMaYです。今回はIronPythonスクリプト側で全ての設定を行う方法でもやってみました。(先日のものはIronPythonスクリプト側を出来るだけ簡素にして予めGUI版CS+でお膳立てした設定(mtpjでは無くてmtudに設定が格納されます)を使用する方法でした。次はデバッグ専用プロジェクトでやってみます。)以下、スクリプトです。
# Run a program with Pass/Fail message in CubeSuite+.execommon.ThrowExcept = Truecommon.ViewOutput = False# Downloaddebugger.Connect()debugger.Download.LoadModule()# Prepare Breakpoint(s)bp = BreakCondition()if debugger.DebugTool.GetType() != DebugTool.Simulator: bp.BreakType = BreakType.Softwarebp.Address = "_Exit"debugger.Breakpoint.Set(bp)# Prepare ActionEvent(s)ae = ActionEventCondition()ae.ActionEventType = ActionEventType.Printfae.Address = "_Pass"ae.Output = "Pass"debugger.ActionEvent.Set(ae)ae.Address = "_Fail"ae.Output = "Fail"debugger.ActionEvent.Set(ae)# Rundebugger.Run(RunOption.WaitBreak)
以下、画面コピーです。Passの場合Failの場合
ハギさん、こんにちは。NoMaYです。デバッグ専用プロジェクトですが以下のように作成すれば手間が少なそうです。(ひとつ作成するだけで良いです。) IronPythonスクリプトは先ほどのものがそのまま使用出来ます。(1) e2 studio上でrcpcファイルを生成する(2) GUI版CS+でrcpcファイルを開く(というかプロジェクトを変換するという作業になります)(3) 変換するプロジェクトの種類としてデバッグ専用プロジェクトを指定する(4) 必要であればシミュレータの設定を変更する(5) 変換後のプロジェクトからソースファイル等を登録解除して、 変換後のプロジェクトへダウンロードファイルを登録追加する以下、画面コピーです。
NoMaYさん
ハギです。
情報ありがとうございます。
ふと疑問に思ったのですが、gdbを使う必要ってあるのでしょうか。
私のイメージだと、RX Simulatorの実行ファイルがrxsimulator、テスト対象のファイルをtest.xだと仮定すると以下のようなコマンドになるのかなと思いました。
rxsimulator test.x
ただ、RX Simulatorの実行ファイルというのがあるのかどうかわかりません。
e2-server-gdb.exeなどが置いてあるフォルダにrx-elf-run.exeというのがあり、これかと思い以下のコマンドを実行してみました。
rx-elf-run.exe -w test.x
しかし、以下のログを吐いてエラー終了していまいます。
Read from unwritten memory at 0xffffffd4Read from unwritten memory at 0xffffffd5Read from unwritten memory at 0xffffffd6Read from unwritten memory at 0xffffffd7Unhandled access violation exception at pc = 0
例外ベクタテーブルを0xFFFFFF80に配置しているので、0xFFFFFFD4に飛ぶということはアクセス例外が発生しているということでしょうか。
プログラムを実行しているように見えますが、rx-elf-run.exeはRX Simulatorとは別物なのでしょうか。
何かご存じであればご教示いただきたいです。
ハギさん、こんにちは。NoMaYです。実は、Renesas RX Simulatorというシミュレータは、それ単体で実行可能なEXEファイルとして存在していなくて、それ自体とは別に入れ物となるEXEファイルが必要となるDLLファイルとして存在するのです。その入れ物となるEXEファイルが、GUI版やコンソール版のCS+のEXEファイルだったり、e2-server-gdb.exeだったり、という仕組みです。ですので、e2 studioの場合、ハギさんがイメージされたものはe2-server-gdb.exeが一番近いのですが、これを操作するコマンドは、GDBリモートシリアルプロトコルと呼ばれるインターフェイスで、人が直接扱えるようなシロモノでは無かったりします。このプロトコルは、GDBという上位階層のソフトウェア(人が操作する)とGDBSERVERという下位階層として使われるソフトウェアとのインターフェイスの為のプロトコルとしてデザインされていて、そういう事情でGDBからでないとe2-server-gdb.exeは人には扱えないです。それで、rx-elf-run.exeというのはRenesas RX Simulatorとは別物のシミュレータです。命令シミュレータですが、そういえば今回の用途では、こちらを使うことも出来る筈ではありますけど、私は使うノウハウを持っていなくて自分にとって良く分からないシミュレータ、というのが正直なところです、、、
ハギさん、こんにちは。NoMaYです。あと、rx-elf-run.exeのシミュレータについて付け加えておくと、実は、同じシミュレータがrx-elf-gdb.exeにも組み込まれているのです。以下の画面コピーのように target sim コマンドで、そのシミュレータでもデバッグが出来ることになっています。(ただ、シミュレータの機能はRenesas RX Simulatorよりも貧弱です。どのぐらいのことまでなら出来るのかということについては私はちょっと把握してないです。)
ご説明ありがとうございます。
RX Simulatorとrx-elf-run.exeは別物でRX Simulatorは直接使えないんですね。
NoMaYさんに調査していただいたgdbを使う方法で試してみます。