MbedプログラムをVisual Studioで編集する(IntelliSense使えるよっ)
twitterで、Visual StudioでArmデバイスのデバッグができるようになったという情報が流れてきました。
Debugging an embedded ARM device in Visual Studio https://t.co/sF2Rn7J0hd
— 雪だるまの人 (@toyowata) 2018年1月11日
Visual Studio 2017 15.5でARM GCCをサポート、15.6 Preview 2でデバッグが可能になったみたい。これは素晴らしい。
というわけで、こちらに記載の、編集作業を試してみました。
全体を、編集、ビルド、フラッシュ、デバッグの4つと考え、今回は編集を試しました。
環境は以下のとおりです。(編集だけなら関係ないことですが)NUCLEO-F411REが手元になかったのでNUCLEO-F401REをターゲットにしました。
- Windows 10 64bit 1709
- Visual Studio 2017 15.5.2
- NUCLEO-F401RE
プログラムの作成
プログラムはMbedオンラインコンパイラで作成します。Visual Studioで新規作成するのではなく、Mbedオンラインコンパイラで新規作成したものをエクスポートして、それをVisual Studioの「フォルダを開く」で開きます。
NUCLEO-F401REのプログラム作成 in Mbedオンラインコンパイラ
Mbedオンラインコンパイラで、新しいプログラムを作成します。プラットフォームはNUCLEO-F401RE。テンプレートは参考ブログと同じBlinky LED test for the ST Nucleo boardsにしました。
Lチカのコードが入ったmain.cppとmbed 2.0ライブラリのプログラムが出来上がります。
エクスポート in Mbedオンラインコンパイラ
出来上がったプログラムを、プログラムのエクスポートでエクスポートします。Export Toolchainにたくさん選択肢があって迷いますが、参考ブログのとおりGC(ARM Embedded)を選びました。
すると、プログラムがダウンロードされるので適当なフォルダに解凍します。ダウンロードされたファイルには、main.cppやmbedライブラリに加え、MakefileやGCC_ARMに対応するためのファイル?が含まれています。
Visual Studioで開く
Visual Studioの「フォルダを開く」機能で、エクスポートしたプログラムを開きます。デフォルトではIntelliSenseがうまく機能しないので、CppProperties.jsonを作成、変更して対処します。
フォルダを開く in Visual Studio
Visual Studioを起動して、ファイル->開く->フォルダーでプログラムの置いてあるフォルダを開きます。すると、ソリューションエクスプローラーにファイルが表示されます。
この時点では、ARM GCCに対応していない状況なので、main.cppを開くとファイル参照や名前参照が解決できず、いくつか赤波線が表示されてしまいます。
CppProperties.jsonを編集(NG) in Visual Studio
プロジェクト->設定の編集->CppProperties.jsonを選ぶと、CppProperties.jsonが作られます。自動的にいくつかの設定が記入されていますが、すべて消して、下記を記入、保存します。
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}' を評価できませんでした。
main.cppの赤波線が消えません。悲しい。
CppProperties.jsonを編集(OK) in Visual Studio
試行錯誤したところ、どうやら参考ブログに書かれているinheritEnvironmentsの記述を変更すると、赤波線が消えました。
CppProperties.json
{ "configurations": [ { "inheritEnvironments": [ "gcc_arm" ], "name": "gccarm", "includePath": [ "${env.INCLUDE}" ], "defines": [ ] } ] }
結果
IntelliSense、バッチリ機能します!!
C標準ライブラリの名前解決ができないようなので引き続き調べたいと思います。(includePathに追加かと)
inheritEnvironmentsの記述ですが、Visual Studio 15.5はgcc_arm, 15.6 Preview 2はgcc-armでした。