Visual Studio Code で NXP製 ARM Cortex-M マイコン向けの開発環境を作る
主に自分の備忘録&同じ環境を作って欲しい人向けの記事です。
NXP製のマイコンのなかでも、最近のCortex-Mシリーズを採用した製品はWeb上のMCUXpresso SDK BuilderによってIDE向けのプロジェクトファイルを作成して利用することができます。
このSDK Builderで生成できるプロジェクトファイルはターゲットのIDEを選ぶことができ、MCU Xpresso IDE以外にもKeil MDK や IAR向けにも作る事ができ、さらにGCC ARM Embeddedという選択肢もあります。 GCC ARM Embeddedを選択して作成されるプロジェクトファイルの中にはbuildのためのスクリプトとCMakeを利用するためのCMakeListが含まれていて、ツールチェインが正しく設定されているならばMCU Xpressoなしで開発をすることができます。
今回は下のくにゅくにゅ氏の記事をベースに、NXP製マイコン向けの開発環境を作る手順をまとめます。
必要なソフトウェア / VSCode拡張
・VSCode 本体
Visual Studio Code - Code Editing. Redefined
・GNU ARM Embedded Toolchain
GNU Toolchain | GNU-RM Downloads – Arm Developer
インストール先はなるべくスペースとか入らないような場所にする。たとえばC:\tools\gcc-arm-none-eabi-9-2019-q4-major
とかにする。
インストール時にPATHに追加する
・CMake
インストール時にPATHに追加する
・OpenOCD
Releases · xpack-dev-tools/openocd-xpack · GitHub
適当な場所に展開しておきます。 自分は以下のようなフォルダ構成になるよう設置しました。
C:\tools\xpack-openocd-0.10.0-13-win32-x64\xPack\OpenOCD\0.10.0-13\bin
・msys2
・JLink Driver
https://www.segger.com/downloads/jlink/#J-LinkSoftwareAndDocumentationPack
これはデバッグインターフェースにJLinkを使用する場合は必要です。
インストール後の作業など
まずはVSCode自体が必要です。これをインストールし、さらに氏の記事にもあるように、VScode上でC/C++拡張とCortex-Debugの拡張機能をインストールします。 さらにCMake Toolsをインストールします。CMakeをVSCodeから利用するための拡張機能は複数ありますが、Microsoftが出しているものを利用してください。
CMake Tools - Visual Studio Marketplace
msys2はMake自体を走らせるために必要です。
インストール後にpacman -Syu
としてリポジトリの情報をアップデートしたあとに、pacman -Sy make
などでインストールします。
msys2にmakeをインストールしたので、Windows側でPATHを通します。さらに環境変数MSYS2_PATH_TYPEを作成し値にinheritを指定しておきます。
VSCode 上の設定
VSCodeにインストールした拡張機能を使う上での設定をいくつか行う必要があります。
VSCode本体や拡張機能の設定を行うためのsettings.json
と、デバッガ起動のためのlaunch.json
の二つを設定する必要があります。
setting.json
以下に示すコードはターミナルとしてMSYS2のbashを利用するための設定も含んでいます。
{ "terminal.integrated.shell.windows": "C:\\msys64\\usr\\bin\\bash.exe", "terminal.integrated.env.windows": { "MSYSTEM": "MINGW64", "CHERE_INVOKING": "1", "MSYS2_PATH_TYPE": "inherit" }, "terminal.integrated.shellArgs.windows": [ "--login" ], "terminal.integrated.cursorStyle": "line", "cmake.configureOnOpen": true, "cmake.buildDirectory": "${workspaceRoot}/build", "cmake.sourceDirectory":"${workspaceRoot}/armgcc", "cmake.generator": "MSYS Makefiles", "cmake.configureArgs":[ "-DCMAKE_TOOLCHAIN_FILE=${workspaceRoot}/../../../../tools/cmake_toolchain_files/armgcc.cmake" ], "C_Cpp.default.configurationProvider": "vector-of-bool.cmake-tools", "cortex-debug.JLinkGDBServerPath": "C:\\tools\\SEGGER\\JLink_V660c\\JLinkGDBServerCL.exe" }
上記の設定で特に重要なのはCMakeまわりです。
GeneratorとしてはMSYS上のMakeを使うことを前提にMSYS Makefiles
を指定しています。
そしてcmake.configureArgs
で指定しているファイルパスですが、これはMCUXpresso SDK Builderで吐き出されたSDKの中のarmgcc.cmake
を指定してください。
このときは相対パスで記述していますが、絶対パスでも問題無いはずです。
また最後にcortex-debugでJLinkを使用する場合の設定を加えています。このときJLinkのGDBサーバーを起動するために実行ファイルまでのフルパスを記述する必要があります。
launch.json
{ "version": "0.2.0", "configurations": [ { "cwd": "${workspaceRoot}", "executable": "./build/Debug/led_blinky.elf", "name": "Debug Microcontroller", "runToMain": true, "request": "launch", "type": "cortex-debug", "servertype": "openocd", "device": "LPC845M301", "configFiles": [ "interface/cmsis-dap.cfg", "target/lpc84x.cfg" ] }, { "cwd": "${workspaceRoot}", "executable": "./build/Debug/led_blinky.elf", "name": "Debug Microcontroller(JLink)", "runToMain": true, "request": "launch", "type": "cortex-debug", "servertype": "jlink", "device": "LPC845M301", "interface": "swd", "ipAddress": null, "serialNumber": null, } ] }
上記のJSONファイルには、デフォルトのオンボードLPC-LinkをCMSIS-DAP経由で利用する場合の設定と、JLink経由で利用する方法の二つを書いています。
詳しい説明はCortex-Debugの設定方法を見て貰うとして、CMSIS-DAPを利用する場合の設定にあるconfigFilesについては、target/lpc84x.cfg
としている箇所を
利用するdeviceに併せて変更してください。
ここのcfgファイルはOpenOCDのディレクトリ下にあるscriptsディレクトリの中に格納されています。
評価ボードとして純正のLPCXpressoを利用している場合、board/nxp_lpc-link2.cfg
を指定しないでください。
これはNXPの単体デバッガーであるLPC-Link2に使われているLPC4370用のファームウェアを書き換えるためのものです。
おわりに
そのほか、IntelliSenseまわりの設定はほかのサイトを参考にしてほしいです。自分でもよく分かってないです。
また誤記など見つけましたら教えて貰えると助かります。