Visual Studio 2022 Community EditionでRX MCUやRL78 MCUのSoftware Developmentが出来るか試してみようと思います

こんにちは。NoMaYです。

昨日Visual Studio 2022 Community Editionをインストールしたのですが、ゴソゴソと触っていたところ、以下のブログ記事に辿り付きました。ちょうど、別スレッドにてVSCodeでRX MCU/RL78 MCUのCC-RX/CC-RLを使っていてもプログラムのビルド/デバッグが出来るようになり始めたところですが(多分ですけどRH850のCC-RHでも出来そう)、どうやら、そちらでやっていたことと話が重なるようでした。ひょっとしたら、Visual Studio 2022でもVSCodeと同様にCC-RX/CC-RL(及びCC-RH)でもビルド/デバッグが出来るようになるかも知れない、という気がして来ました。そこで、これから試して行こうと思います。

なお、以下のブログ記事はVisual Studio 2017について書かれたものですが、Visual Studio 2022で試してみると同じようには出来ないようだ、ということまでは分かって来ました。ただ、Makefileでは無く、CMakeLists.txtであれば、出来るようになるかも知れない、という気がして来たところです。(まだ、気がする、程度ですけれど。)

ARM GCC Cross Compilation in Visual Studio
devblogs.microsoft.com/cppblog/arm-gcc-cross-compilation-in-visual-studio/

Debugging an embedded ARM device in Visual Studio
devblogs.microsoft.com/cppblog/debugging-an-embedded-arm-device-in-visual-studio/

[追記]

あぁっ、以下の記事のようにすればCMakeを使わなくてもやれるのかも、、、

Docs / Visual Studio / IDE / 開発 / プロジェクトやソリューションなしで開発する / ビルドのカスタマイズとタスクのデバッグ
"フォルダーを開く" の開発のためにビルド タスクとデバッグ タスクをカスタマイズする
docs.microsoft.com/visualstudio/ide/customize-build-and-debug-tasks-in-visual-studio?view=vs-2022
 

  • 昨今のOSSプロジェクト、Visual Studioでのビルドもサポートされてて強力なエディットとデバッグ機能を享受できるので便利ですよね。

  • こんにちは。NoMaYです。

    RXもRL78もVisual Studio 2022でデバッグまで出来るようになりました。レジスタ表示に加えて、メモリ表示や逆アセンブル表示も出来ました。(ただ、まだ全体的に、不安定感はありますけれども。)

    以下、それぞれの画面コピーです。

    RX


    RL78

     

  • こんにちは。NoMaYです。

    Visual Studio 2022でRX MCU/RL78 MCUのCC-RX/CC-RLを使ったプログラムのビルド/デバッグが出来るようになった各種設定ファイルの今日時点のものを以下のzipに固めました。別スレッドに投稿したVSCodeのものに比べて以下の進展があります。(VSCodeのものも後日アップデートするつもりです。(出来る限り同じ様にしたいと思います。))

    (1) e2 studioのheadless buildだけでなく、e2 studioが生成したmakefileを直接使用してビルドする方法にも対応した
    (1') かつ、headless buildよりもmakefileを直接使用してビルドする方法を主たる(より容易に操作出来る)ビルド方法として設定した

    (2) buildだけでなく、rebuildにも対応した
    (2') こちらもheadless buildだけでなくmakefileを直接使用してビルドする方法にも対応して後者の方が容易に操作出来るようにした

    (3) e2 studioでワークスペースを開いたままにしてもheadless buildが出来るようにした
    (3') 元のワークスペースフォルダの直下に.headlessbuildという別のワークスペースフォルダを作成して使用するように変更しました

    (4) e2 studioやCC-RX/CC-RLの各種パス設定やプロジェクトの各種設定をCppProperties.jsonというファイルにまとめた
    (4') VSCodeで試していたtool_path_setup.batというバッチファイルは削除しました
    (4'') VSCodeで試していたものより後退した点として、プロジェクト名をプロジェクトフォルダ名で代用させる手が使えなくなりました

    今回の以下のzipには次のファイルを固めています。

    visualstudio2022_helper_files_rl78_20211128.zip
    visualstudio2022_helper_files_rx_20211128.zip

    Visual Studio MCU.elf ← 注: VisualStudio 2022にMCU向けプロジェクトだと判定させる小細工のダミーファイルです
    CppProperties.json
    .vs/c_cpp_intellisense_helper.h
    .vs/launch.vs.json
    .vs/tasks.vs.json
    .vs/.script/build.bat
    .vs/.script/build.ps1
    .vs/.script/gdb.bat
    .vs/.script/gdbserver.bat
    .vs/.script/gdb_custom_launch_setup.gdb
    .vs/.script/gdb_setup.gdb

     
    以下、今回のやり方での、Visula Studio 2022の、メニュー、ツールバー、ソリューションエクスプローラー、の表示の画面コピーです。

    ビルドメニューにはe2 studioが生成したmakefileを直接使用するビルド方法でのbuildとrebuildが表示されます


    ツールバーにはe2 studioが生成したmakefileを直接使用するビルド方法でのbuildが表示されます
    (実は、既に私はツールバーをカスタマイズしていて、以下の通りビルドツールバーの内容を標準ツールバーに組み込んでます)


    ソリューションエクスプローラのコンテキストメニューでは最初に書いた4つ全てのビルド方法が表示されます
    (このコンテキストメニューが表示されるファイルは、.cproject、.project、Visual Studio MCU.elf、の3種類です)
    (コンテキストメニューで with updating makefile が付いている build と rebuild は e2 studio headless build でビルドします)


    ツールバーにはデバッガ起動ボタンも表示されます(仕様か設定ファイル起因か今後要調査ですが必ずビルドが実行されます)



    以下、e2 studioやCC-RX/CC-RLの各種パス設定やプロジェクトの各種設定をまとめたCppProperties.jsonファイルの内容です。赤文字箇所がプロジェクト依存箇所、青文字箇所がツールインストール依存箇所、その他の部分は変更の必要があれば変更すれば良いです。(思うに、これらの依存箇所に関係する情報はe2 studioが既に持っていますので、何らかの手法を使って入手することが出来れば、このCppProperties.jsonを自動生成させるスクリプトも作れなくは無さそう、なのではありますけれども、、、)

    CppProperties.json (最近のかふぇルネの投稿システムはコードブロック内でもURLを省略表現リンクへ自動変換してしまうのが困りものですかね、、、)

    CC-RX用

    {
      // docs.microsoft.com/.../open-folder-projects-cpp
      // docs.microsoft.com/.../cppproperties-schema-reference
      "configurations": [
        {
          "name": "CC-RX",
          "includePath": [
            "${env.TCINSTALL}\\include",
            "${workspaceRoot}\\**"
          ],
          "defines": [
          ],
          "undefines": [
          ],
          // docs.microsoft.com/.../std-specify-language-standard-version
          // Unfortunately MSVC cannot accept C99 standard.
          // "compilerSwitches": "/std:c99",
          "compilerSwitches": "/std:c11",
          "intelliSenseMode": "windows-msvc-x86",
          "forcedInclude": [
            "./.vs/c_cpp_intellisense_helper.h"
          ],
          "environments": [
            {
              "E2STUDIO_WORKSPACE_ROOT": "C:\\Renesas\\GitHubDesktop\\workspaces\\workspace_e2v202110",
              //
              "PROJECT_NAME": "TestProgRun",
              "PROJECT_ROOT": "${projectRoot}", // This macro ends with '\'.
              "PROGRAM_NAME": "${env.PROJECT_NAME}",
              //
              "BUILD_CONFIG_RELEASE_NAME": "Release", // Reserved for future use.
              "BUILD_CONFIG_DEBUG_NAME": "HardwareDebug",
              "DEBUG_CONFIG_HARDWAREDEBUG_NAME": "HardwareDebug",
              "DEBUG_CONFIG_HARDWAREDEBUG_LCFG": "${env.PROJECT_NAME} ${env.DEBUG_CONFIG_HARDWAREDEBUG_NAME}.launch",
              "DEBUG_CONFIG_HARDWAREDEBUG_SOPT": "",
              "DEBUG_CONFIG_SIMULATORDEBUG_NAME": "RenesasSimDebug",
              "DEBUG_CONFIG_SIMULATORDEBUG_LCFG": "${env.PROJECT_NAME} ${env.DEBUG_CONFIG_SIMULATORDEBUG_NAME}.launch",
              "DEBUG_CONFIG_SIMULATORDEBUG_SOPT": "",
              //
              "ECLIPSE_HOME": "C:\\Renesas\\e2studio64_v202110\\eclipse",
              "SUPPORT_AREA": "C:\\Renesas\\e2studio64\\SupportFiles\\.eclipse\\com.renesas.platform_1643561029",
              "PYTHONHOME": "${env.ECLIPSE_HOME}\\runtimes\\python\\2.7.12_x86",
              "TCINSTALL": "C:\\Renesas\\CS+\\CC\\CC-RX\\V3.03.00",
              //
              "environment": "Renesas_R_CPUs"
            }
          ],
          "inheritEnvironments": [
            "Renesas_R_CPUs"
          ]
        }
      ]
    }

     
    CC-RL用
    (紫文字の "-uComPort= COM9" はRL78/G23 FPBのCOMPort通信デバッグ用ですのでE2 Lite等では "" にして下さい)
    (COMPort通信デバッグの場合でもe2 studioでlauchファイルを作成した時のCOMPortと同じならば "" にして構わないです)

    {
      // docs.microsoft.com/.../open-folder-projects-cpp
      // docs.microsoft.com/.../cppproperties-schema-reference
      "configurations": [
        {
          "name": "CC-RL",
          "includePath": [
            "${env.TCINSTALL}\\inc",
            "${workspaceRoot}\\**"
          ],
          "defines": [
          ],
          "undefines": [
          ],
          // docs.microsoft.com/.../std-specify-language-standard-version
          // Unfortunately MSVC cannot accept C99 standard.
          // "compilerSwitches": "/std:c99",
          "compilerSwitches": "/std:c11",
          "intelliSenseMode": "windows-msvc-x86",
          "forcedInclude": [
            "./.vs/c_cpp_intellisense_helper.h"
          ],
          "environments": [
            {
              "E2STUDIO_WORKSPACE_ROOT": "C:\\Renesas\\GitHubDesktop\\workspaces\\workspace_e2v202110",
              //
              "PROJECT_NAME": "rl78g23_fpb",
              "PROJECT_ROOT": "${projectRoot}", // This macro ends with '\'.
              "PROGRAM_NAME": "${env.PROJECT_NAME}",
              //
              "BUILD_CONFIG_RELEASE_NAME": "Release", // Reserved for future use.
              "BUILD_CONFIG_DEBUG_NAME": "HardwareDebug",
              "DEBUG_CONFIG_HARDWAREDEBUG_NAME": "HardwareDebug",
              "DEBUG_CONFIG_HARDWAREDEBUG_LCFG": "${env.PROJECT_NAME} ${env.DEBUG_CONFIG_HARDWAREDEBUG_NAME}.launch",
              "DEBUG_CONFIG_HARDWAREDEBUG_SOPT": "-uComPort= COM9",
              "DEBUG_CONFIG_SIMULATORDEBUG_NAME": "RenesasSimDebug",
              "DEBUG_CONFIG_SIMULATORDEBUG_LCFG": "${env.PROJECT_NAME} ${env.DEBUG_CONFIG_SIMULATORDEBUG_NAME}.launch",
              "DEBUG_CONFIG_SIMULATORDEBUG_SOPT": "",
              //
              "ECLIPSE_HOME": "C:\\Renesas\\e2studio64_v202110\\eclipse",
              "SUPPORT_AREA": "C:\\Renesas\\e2studio64\\SupportFiles\\.eclipse\\com.renesas.platform_1643561029",
              "PYTHONHOME": "${env.ECLIPSE_HOME}\\runtimes\\python\\2.7.12_x86",
              "TCINSTALL": "C:\\Renesas\\CS+\\CC\\CC-RL\\V1.10.00",
              //
              "environment": "Renesas_R_CPUs"
            }
          ],
          "inheritEnvironments": [
            "Renesas_R_CPUs"
          ]
        }
      ]
    }

     

  • こんにちは。NoMaYです。

    別スレッドでVisual Studio Codeの方もやっていますけれども、そちらとの合わせ込みでファイルを更新しました。操作面での変更は無いです。(ちなみに、CppProperties.jsonの内容も更新しています。大きな更新では無いです。)

    なお、今回気付いたのですけど、Visual Studio Codeの方と同じようなやり方をしているのに、Visual Studio 2022では、コンパイラのInformationレベル(ワーニング)メッセージがVisual Studio 2022に認識されていませんでした。何か対策を考えたいと思っています。もっとも、リンク時のエラー/ワーニングへの対応が未着手ですけれど、、、)

    visualstudio2022_helper_files_rl78_20211203.zip
    visualstudio2022_helper_files_rx_20211203.zip

    Visual Studio MCU.elf ← 注: Visual Studio 2022にMCU向けプロジェクトだと判定させる小細工のダミーファイルです
    CppProperties.json
    .vs/c_cpp_intellisense_helper.h
    .vs/launch.vs.json
    .vs/tasks.vs.json
    .vs/.script/build.bat
    .vs/.script/build.ps1
    .vs/.script/gdb.bat
    .vs/.script/gdbserver.bat
    .vs/.script/gdb_custom_launch_setup.gdb
    .vs/.script/gdb_setup.gdb
    .vs/.script/inherit_environments.bat

     

  • こんにちは。NoMaYです。

    > (思うに、これらの依存箇所に関係する情報はe2 studioが既に持っていますので、何らかの手法を使って入手することが出来れば、このCppProperties.jsonを自動生成させるスクリプトも作れなくは無さそう、なのではありますけれども、、、)

    以下のコマンドをe2 studio内で実行すると以下の画面コピーの結果が得られますね。あと、TCINSTALLはmakefileと一緒に生成されるmakefile.initというファイルに情報があります。(ただ、ショートファイル名からロングファイル名へ変換する必要がありますけれども。)

    C:\Windows\System32\cmd.exe /c @(echo PROJECT_NAME=${project_name}&&echo CONFIG_NAME=${config_name:${project_name}}&&echo WORKSPACE=${workspace_loc}&&echo ECLIPSE_HOME=${eclipse_home}&&echo SUPPORT_AREA=${support_area_loc})



    makefile.init

    RX

    ################################################################################
    # Automatically-generated file. Do not edit!
    ################################################################################

    PATH := $(PATH)
    export INC_RX=C:\Renesas\CS_~1\CC\CC-RX\V303~1.00\include
    export RXC_LIB=C:\Renesas\CS_~1\CC\CC-RX\V303~1.00\bin
    export BIN_RX=C:\Renesas\CS_~1\CC\CC-RX\V303~1.00\bin

     
    RL78

    ################################################################################
    # Automatically-generated file. Do not edit!
    ################################################################################

    PATH := $(PATH):C:\Renesas\CS_~1\CC\CC-RL\V110~1.00\bin

     
    [追記]

    試行錯誤していたら、以下でTCINSTALLも得ることが出来るようになりました。

    CC-RX → ${e2_studio.toolchain_path:Renesas_RXC}
    CC-RL → ${e2_studio.toolchain_path:Renesas_CCRL}

    C:\Windows\System32\cmd.exe /c @(echo PROJECT_NAME=${project_name}&&echo CONFIG_NAME=${config_name:${project_name}}&&echo WORKSPACE=${workspace_loc}&&echo ECLIPSE_HOME=${eclipse_home}&&echo SUPPORT_AREA=${support_area_loc}&&echo TCINSTALL=${e2_studio.toolchain_path:Renesas_RXC})


     

  • こんにちは。NoMaYです。

    あっ、e2 studio上でmakefileの生成だけをすることが出来そうな予感が、、、

    以下、画面コピーです。



    [追記]

    Update All Dependenciesというメニューもありますが、こちらは新規ファイルや更新ファイルに対してmakeの実行を伴うものです。

    以下、画面コピーです。





    [追記その2]

    このe2 studioには、RX、RL78、RH850、しか入れていないのに何故メニューにFSPなんちゃらが表示されるのだろうか、、、

  • こんにちは。NoMaYです。

    e2 studioからVisual Studio 2022やVSCodeを起動して“フォルダを開く”という場合に便利そうな小技のメモです。環境変数Pathにパスが含まれていなくても起動します。

    Visual Studio 2022の例 (今後もっと新しい版が出た場合はそちらが起動すると予想していますけれど。)

    cmd.exe /c start devenv "C:\Renesas\GitHubDesktop\workspaces\workspace_e2v202110\TestProgRun"

     
    VSCodeの例

    cmd.exe /c start vscode: "C:\Renesas\GitHubDesktop\workspaces\workspace_e2v202110\TestProgRun"

     
    [追記]

    他方、Visual Studio 2022やVSCodeからルネサス検索ページをブラウザで開きたい場合は以下の小技が使えそうです。

    cmd.exe /c start https://www.renesas.com/jp/ja/search