Catalystize!

コーヒー美味しい

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製マイコン向けの開発環境を作る手順をまとめます。

kunukunu.hatenablog.com

必要なソフトウェア / 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

Download | 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

MSYS2 homepage

・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まわりの設定はほかのサイトを参考にしてほしいです。自分でもよく分かってないです。

また誤記など見つけましたら教えて貰えると助かります。