VSCodeで組込み系のソースを編集

やりたいこと

前提

  • VSCode拡張機能 C/C++ がインストールされていること。
  • とりあえずこれだけで、構文ハイライトやナビゲーション、インテリセンスが効く。

何が足りない?

  • インクルードパスの指定
  • マクロ定義 (#ifdef などに使うマクロをコンパイラのオプションで定義している場合)
  • _WIN32 を定義させない
  • __ramfunc のような組込み系特有のキーワードのごまかし

方法

{
    "configurations": [
        {
            "includePath": [
                "${workspaceFolder}",
                "${workspaceFolder}/Inc",
                "${workspaceFolder}/Drivers/STM32F7xx_HAL_Driver/Inc",
                "${workspaceFolder}/Drivers/STM32F7xx_HAL_Driver/Inc/Legacy",
                "${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F7xx/Include",
                "${workspaceFolder}/Drivers/CMSIS/Include"
            ],
            "defines": [
                "USE_HAL_DRIVER",
                "STM32F767xx",
                "__ramfunc="
            ],
            "compilerPath": "C:/Ac6/SystemWorkbench/plugins/fr.ac6.mcu.externaltools.arm-none.win32_1.17.0.201812190825/tools/compiler/bin/arm-none-eabi-gcc.exe",
            "intelliSenseMode": "gcc-arm",
            "cStandard": "c99",
            "cppStandard": "c++11"
        }
    ],
    "version": 4
}

解説

(1) インクルードパスの指定
  • configuration の includePath に列挙する。
  • ワークスペースのパスは ${workspaceFolder} と書く。
(2) マクロ定義
  • configuration の defines に列挙する。
(3) _WIN32 を定義させない
  • configuration の compilerPath に gcc のパスを指定する。
  • configuration の intelliSenseMode に "gcc-arm" を指定する。
  • ベンダ固有のコンパイラを指定しても認識してくれない。(まあそうでしょ。)
(4) 組込み系特有のキーワードのごまかし
  • __ramfunc のようなキーワードは前述のマクロ定義で空文字列に置換させる。