RX Simulator環境でコマンドラインからプロジェクトを実行する

こんにちは。

ハギと申します。

RX Simulatorでコマンドラインからプロジェクトを実行することは可能なのでしょうか。

最終的にやりたいことは、「Github Actionsを使ってGithubにpushをしたら、self hosted環境でユニットテストを自動で実行する」というようなことです。

現在、GUIのe2studioのRX Simulator環境でユニットテストを行い、Renesas Debug Virtual Consoleに結果を表示するということはできています。

また、コマンドラインでビルドは以下のページによると可能とのこと。

https://ja-support.renesas.com/knowledgeBase/17797621

よって、後はコマンドラインからテストの実行さえできればやりたいことができそうな気がしていますが、このようなことは可能なのでしょうか。

Parents
  • ハギさん、こんにちは。NoMaYです。

    e2 studioに同梱されているrx-elf-gdb.exe+e2-server-gdb.exe+Renesas RX Simulatorのコマンドラインからの実行が出来るかどうか、今夜にでも試してみようと思いました。(実は以前から気になっていて今回が何かの契機のような気がしましたので。)

    その一方で、CS+にコマンドライン版というものがあり、以下のことが出来ます。また、コンパイラにCC-RXを使用しているのであれば、e2 studioでビルドしたabsファイルはCS+のRenesas RX Simulatorでも読み込めます。あと、GUI版にしろコマンドライン版にしろ、デバッグ専用プロジェクトというものが作れるようになっていてビルド時のプロジェクトとは独立した簡素なプロジェクトで済ませることも出来ます。(以下は昔の話ですが今でも大丈夫だと思うのですけれど。)

    (1) mtpjファイルを読み込んでビルドする
    (2) mtpjファイル+absファイルを読み込んでRenesas RX Simulatorを実行すること

    実行結果のPass/Fail/それらに限らずMessage文字列の表示は、Debug Virtual Consoleでなくても、以下の方法でも出来ると思うのです。(これは実はまだコマンドライン版では試してませんけれど。)

    (A) GDBであればDynamic Printfでコマンドプロンプトへメッセージを表示する
    (B) CS+コマンドライン版であればAction Eventでコマンドプロンプトへメッセージを表示する

    なお、どうも今のところCS+でしか使えないようですが、CS+のRenesas RX Simulatorでは以下のことも出来ます。(これも実はまだコマンドライン版では試してませんけれど。)

    (C) ファイル入出力

    今のところ頭に思い浮かんでいるのは、こういったところです、、、

  • NoMaYさん

    ハギです。

    いつもお世話になってます。

    情報ありがとうございます。

    いただいた情報をもとに私の方でも試してみたいと思います。

  • ハギさん、こんにちは。NoMaYです。

    途中経過です。rx-elf-gdb.exe+e2-server-gdb.exe+Renesas RX Simulatorでコマンドラインから起動後、GDBとGDBSERVERを接続するところまでが出来ました。(以下の画面コピー) これから、ダウンロード、実行、Pass/Failの表示、など試してみます。

    以下、参考にした資料です。

    統合開発環境 e² studio を使用したリモートデバッグの方法
    R20AN0630JJ0100 Rev.1.00 Sep.01.21
    www.renesas.com/jp/ja/document/apn/how-use-remote-debugging-integrated-development-environment-e-studio

    launch rx-elf-gdb.exe without e2 studio
    https://www.google.com/search?q=renesasrulz.com/the_vault/f/archive-forum/8621/launch-rx-elf-gdb-exe-without-e2-studio

    Non-Stop Mode (Debugging with GDB)
    sourceware.org/gdb/current/onlinedocs/gdb/Non_002dStop-Mode.html

    以下、画面コピーです。

    GDBSERVER側 ([追記] 2021/11/06 00:00 すみません。環境変数設定は余分でした。ごめんなさい。)


    GDB側 ([追記] 2021/11/06 00:00 すみません。環境変数設定が抜けています。ごめんなさい。)


    以下、入力したコマンドです。

    GDBSERVER側 ([追記] 2021/11/06 00:00 すみません。環境変数設定を削除しました。)

    cd /d C:\Renesas\e2studio64\SupportFiles\.eclipse\com.renesas.platform_1643561029\DebugComp\RX

    e2-server-gdb -p 60916 -g SIMULATOR -t R5F572NN -uPeripheralClkRatio= 4 -uCpuClkFreq= 240 -uRegisterSetting= 0 -uModePin= 0 -uCacheDecode= 1 -uIOModule= IodllForCMT.dll -uIOModule= IodllForICU_dpfpu.dll -n 0 -uWorkRamAddress= 0 -uEmStopInt= 0 -uEmStopInterrupt= 0 -uEmStopFPexp= 0 -l -uCore= SINGLE_CORE^|enabled^|1^|main -uSyncMode= async -uFirstGDB= main
     
    GDB側 ([追記] 2021/11/06 00:00 すみません。環境変数設定を追加しました。)

    cd /d C:\Renesas\e2studio64\SupportFiles\.eclipse\com.renesas.platform_1643561029\DebugComp\RX

    set Path=C:\Renesas\e2studio64_v202110\eclipse\runtimes\python\2.7.12_x86;%Path%

    set PYTHONPATH=C:\Renesas\e2studio64_v202110\eclipse\runtimes\python\2.7.12_x86\lib

    rx-elf-gdb -rx-force-isa=v3 -rx-force-double-fpu


     
    set pagination off

    set non-stop on

    target extended-remote-rx localhost:60916
     

Reply
  • ハギさん、こんにちは。NoMaYです。

    途中経過です。rx-elf-gdb.exe+e2-server-gdb.exe+Renesas RX Simulatorでコマンドラインから起動後、GDBとGDBSERVERを接続するところまでが出来ました。(以下の画面コピー) これから、ダウンロード、実行、Pass/Failの表示、など試してみます。

    以下、参考にした資料です。

    統合開発環境 e² studio を使用したリモートデバッグの方法
    R20AN0630JJ0100 Rev.1.00 Sep.01.21
    www.renesas.com/jp/ja/document/apn/how-use-remote-debugging-integrated-development-environment-e-studio

    launch rx-elf-gdb.exe without e2 studio
    https://www.google.com/search?q=renesasrulz.com/the_vault/f/archive-forum/8621/launch-rx-elf-gdb-exe-without-e2-studio

    Non-Stop Mode (Debugging with GDB)
    sourceware.org/gdb/current/onlinedocs/gdb/Non_002dStop-Mode.html

    以下、画面コピーです。

    GDBSERVER側 ([追記] 2021/11/06 00:00 すみません。環境変数設定は余分でした。ごめんなさい。)


    GDB側 ([追記] 2021/11/06 00:00 すみません。環境変数設定が抜けています。ごめんなさい。)


    以下、入力したコマンドです。

    GDBSERVER側 ([追記] 2021/11/06 00:00 すみません。環境変数設定を削除しました。)

    cd /d C:\Renesas\e2studio64\SupportFiles\.eclipse\com.renesas.platform_1643561029\DebugComp\RX

    e2-server-gdb -p 60916 -g SIMULATOR -t R5F572NN -uPeripheralClkRatio= 4 -uCpuClkFreq= 240 -uRegisterSetting= 0 -uModePin= 0 -uCacheDecode= 1 -uIOModule= IodllForCMT.dll -uIOModule= IodllForICU_dpfpu.dll -n 0 -uWorkRamAddress= 0 -uEmStopInt= 0 -uEmStopInterrupt= 0 -uEmStopFPexp= 0 -l -uCore= SINGLE_CORE^|enabled^|1^|main -uSyncMode= async -uFirstGDB= main
     
    GDB側 ([追記] 2021/11/06 00:00 すみません。環境変数設定を追加しました。)

    cd /d C:\Renesas\e2studio64\SupportFiles\.eclipse\com.renesas.platform_1643561029\DebugComp\RX

    set Path=C:\Renesas\e2studio64_v202110\eclipse\runtimes\python\2.7.12_x86;%Path%

    set PYTHONPATH=C:\Renesas\e2studio64_v202110\eclipse\runtimes\python\2.7.12_x86\lib

    rx-elf-gdb -rx-force-isa=v3 -rx-force-double-fpu


     
    set pagination off

    set non-stop on

    target extended-remote-rx localhost:60916
     

Children
  • ハギさん、こんにちは。NoMaYです。

    途中経過その2です。ダウンロード、実行、Pass/Failの表示、など試してみました。それで気付いたのですけれど、Pass/Failはプログラム内から敢えて表示しようとしなくても、GDBがブレーク時に表示するメッセージだけでも区別出来そうですね、、、この後、ブレークしたらGDBを終了させるという方法を調べてみます。ただ、これも気付いたことですけれど、決められた時間内にPass/Failで終了しなかった場合に強制終了するフェールセーフも本当はあった方が良さそうですけど、そこまでは手が回りそうにないです、、、

    以下、画面コピーです。





    以下、コマンドとソースです。

    file C:/Renesas/GitHubDesktop/workspaces/workspace_e2v202110/TestProgRun/HardwareDebug/TestProgRun.x
    set pagination off
    set non-stop on
    target extended-remote-rx localhost:60916
    monitor enable_execute_on_connect
    monitor enable_stopped_notify_on_connect
    # wait for a notification
    load
    b Pass
    b Fail
    i b
    c

     

    #include "r_smc_entry.h"
    #include "rpbrx72ndef.h"

    #pragma noinline Pass
    #pragma noinline Fail
    void Pass(void);
    void Fail(void);

    int main(void)
    {
        Pass();
        //Fail();

        for (;;) ;
    }

    void Pass(void)
    {
        for (;;) ;
    }

    void Fail(void)
    {
        for (;;) ;
    }

     

  • ハギさん、こんにちは。NoMaYです。

    ひとまずそれっぽいことが出来ました。以下のコマンド入力ファイルを作成し、標準入力をリダイレクトしてGDBに実行させてみました。(実は他にも試してみたのですが、どうも何かしらデリケートなタイミング案件があるようで、何とか動いたのが標準入力をリダイレクトする方法でした。) 週明け、コマンドライン版CS+もやってみます。

    以下、画面コピーです。([追記] 2021/11/06 00:00 すみません。環境変数設定が抜けています。ごめんなさい。)



    以下、コマンドとコマンド入力ファイルです。([追記] 2021/11/06 00:00 すみません。環境変数設定を追加しました。)

    cd /d C:\Renesas\e2studio64\SupportFiles\.eclipse\com.renesas.platform_1643561029\DebugComp\RX

    set Path=C:\Renesas\e2studio64_v202110\eclipse\runtimes\python\2.7.12_x86;%Path%

    set PYTHONPATH=C:\Renesas\e2studio64_v202110\eclipse\runtimes\python\2.7.12_x86\lib

    rx-elf-gdb -rx-force-isa=v3 -rx-force-double-fpu --silent C:/Renesas/GitHubDesktop/workspaces/workspace_e2v202110/TestProgRun/HardwareDebug/TestProgRun.x < C:\Renesas\GitHubDesktop\workspaces\workspace_e2v202110\TestProgRun\TestProgRun.gdbcmd


    TestProgRun.gdbcmd

    set pagination off
    set non-stop on
    target extended-remote-rx localhost:60916
    monitor enable_stopped_notify_on_connect
    monitor enable_execute_on_connect
    # wait for a notification
    load
    b Pass
    b Fail
    c
    q

     
    [追記] 2021/10/30 13:00

    すみません、うっかり試行錯誤中にやっていたコマンドが紛れ込んだまま投稿してしまいました。以下のコマンドは削除しました。

    TestProgRun.gdbcmd

    set pagination off
    set non-stop on
    set target-async on
    target extended-remote-rx localhost:60916
    monitor enable_stopped_notify_on_connect
    monitor enable_execute_on_connect
    # wait for a notification
    load
    b Pass
    b Fail
    c
    q