MbedプログラムをVisual Studioで編集する(IntelliSense使えるよっ)

twitterで、Visual StudioでArmデバイスデバッグができるようになったという情報が流れてきました。

Visual Studio 2017 15.5でARM GCCをサポート、15.6 Preview 2でデバッグが可能になったみたい。これは素晴らしい。

というわけで、こちらに記載の、編集作業を試してみました。

blogs.msdn.microsoft.com

全体を、編集、ビルド、フラッシュ、デバッグの4つと考え、今回は編集を試しました。

環境は以下のとおりです。(編集だけなら関係ないことですが)NUCLEO-F411REが手元になかったのでNUCLEO-F401REをターゲットにしました。

プログラムの作成

プログラムはMbedオンラインコンパイラで作成します。Visual Studioで新規作成するのではなく、Mbedオンラインコンパイラで新規作成したものをエクスポートして、それをVisual Studioの「フォルダを開く」で開きます。

NUCLEO-F401REのプログラム作成 in Mbedオンラインコンパイラ

Mbedオンラインコンパイラで、新しいプログラムを作成します。プラットフォームはNUCLEO-F401RE。テンプレートは参考ブログと同じBlinky LED test for the ST Nucleo boardsにしました。

f:id:matsujirushix:20180114124653p:plain

Lチカのコードが入ったmain.cppとmbed 2.0ライブラリのプログラムが出来上がります。

f:id:matsujirushix:20180114124909p:plain

エクスポート in Mbedオンラインコンパイラ

出来上がったプログラムを、プログラムのエクスポートでエクスポートします。Export Toolchainにたくさん選択肢があって迷いますが、参考ブログのとおりGC(ARM Embedded)を選びました。

f:id:matsujirushix:20180114125104p:plain

f:id:matsujirushix:20180114125220p:plain

すると、プログラムがダウンロードされるので適当なフォルダに解凍します。ダウンロードされたファイルには、main.cppやmbedライブラリに加え、MakefileGCC_ARMに対応するためのファイル?が含まれています。

f:id:matsujirushix:20180114125944p:plain

f:id:matsujirushix:20180114125922p:plain

Visual Studioで開く

Visual Studioの「フォルダを開く」機能で、エクスポートしたプログラムを開きます。デフォルトではIntelliSenseがうまく機能しないので、CppProperties.jsonを作成、変更して対処します。

フォルダを開く in Visual Studio

Visual Studioを起動して、ファイル->開く->フォルダーでプログラムの置いてあるフォルダを開きます。すると、ソリューションエクスプローラーにファイルが表示されます。

この時点では、ARM GCCに対応していない状況なので、main.cppを開くとファイル参照や名前参照が解決できず、いくつか赤波線が表示されてしまいます。

f:id:matsujirushix:20180114130117p:plain

f:id:matsujirushix:20180114130321p:plain

CppProperties.jsonを編集(NG) in Visual Studio

プロジェクト->設定の編集->CppProperties.jsonを選ぶと、CppProperties.jsonが作られます。自動的にいくつかの設定が記入されていますが、すべて消して、下記を記入、保存します。

f:id:matsujirushix:20180114130410p:plain

CppProperties.json

{
  "configurations": [
    {
      "inheritEnvironments": [
        "gcc-arm"
      ],
      "name": "gccarm",
      "includePath": [
        "${env.INCLUDE}"
      ],
      "defines": [

      ]
    }
  ]
}

何故かエラー!?

C:\mbed\Nucleo_blink_led_gcc_arm_nucleo_f401re\Nucleo_blink_led\CppProperties.json: 警告: 環境変数 '${env.INCLUDE}' を評価できませんでした。
C:\mbed\Nucleo_blink_led_gcc_arm_nucleo_f401re\Nucleo_blink_led\CppProperties.json: 警告: 環境変数 '${cpp.intelliSenseMode}' を評価できませんでした。

f:id:matsujirushix:20180114133712p:plain

main.cppの赤波線が消えません。悲しい。

CppProperties.jsonを編集(OK) in Visual Studio

試行錯誤したところ、どうやら参考ブログに書かれているinheritEnvironmentsの記述を変更すると、赤波線が消えました。

(誤)gcc-arm -> (正)gcc_arm

CppProperties.json

{
  "configurations": [
    {
      "inheritEnvironments": [
        "gcc_arm"
      ],
      "name": "gccarm",
      "includePath": [
        "${env.INCLUDE}"
      ],
      "defines": [

      ]
    }
  ]
}

結果

IntelliSense、バッチリ機能します!!

f:id:matsujirushix:20180114133836p:plain

C標準ライブラリの名前解決ができないようなので引き続き調べたいと思います。(includePathに追加かと)

inheritEnvironmentsの記述ですが、Visual Studio 15.5はgcc_arm, 15.6 Preview 2はgcc-armでした。