5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

VSCodeでnRF5の開発をするときに起こる参照エラーを徹底的に取り除く

Posted at

はじめに

MacでnRF52を使った開発をしており、はじめはSegger Embedded Studioを使っていたのですが、まあこれがクラッシュしまくる上にコード補完が全然なくイライラだったので調べているとVSCodeが開発環境に使えるという情報をゲットし導入しました。
しかし、uint8_tとuint32_tの型がエラーとなっていろいろなところに波線が引かれていたのですが、ついにその解決ができたのでまとめます。

nRF5 + GNU Arm Embedded Toolchain + VSCode導入方法

こちらを参考にしました。
英語記事ですが画像が多めなのでなんとなくで理解できると思います。
https://www.novelbits.io/nrf52-visual-studio-code/

日本語記事もいくつか存在し、みなさん少しづつ定義ファイルの作り方が異なりますが大枠は同じです。
https://qiita.com/nishinohi/items/545521df7b06e66149c9
https://qiita.com/ksksue@github/items/dcf5d9938fad5a622968

uint8_t, uint32_t 参照エラー解決方法

以下が私が現在使用中のc_cpp_properties.jsonです。

c_cpp_properties.json
{
    "env": {
        "nRF_SDK": "${workspaceFolder}/../nRF5_SDK",
        "GNU_GCC": "${workspaceFolder}/../gnu_toolchain"
    },
    "configurations": [
        {
            "name": "Mac",
            "includePath": [
                "${nRF_SDK}/components/**",
                "${nRF_SDK}/modules/**",
                "${nRF_SDK}/integration/**",
                "${GNU_GCC}/arm-none-eabi/include",
                "${GNU_GCC}/lib/gcc/arm-none-eabi/9.2.1/include/**",
                "${GNU_GCC}/lib/gcc/arm-none-eabi/9.2.1/include-fixed/**",
                "${workspaceFolder}/service/*",
                "${workspaceFolder}/config/*",
                "${workspaceFolder}/drivers/**"
            ],
            "defines": [
                "BOARD_CUSTOM",
                "CONFIG_GPIO_AS_PINRESET",
                "FLOAT_ABI_HARD",
                "INITIALIZE_USER_SECTIONS",
                "NO_VTOR_CONFIG",
                "NRF52840_XXAA",
                "NRF_SD_BLE_API_VERSION=6",
                "S140",
                "SOFTDEVICE_PRESENT",
                "SWI_DISABLE0",
                "__STATIC_INLINE= static inline"
            ],
            "compilerPath": "${GNU_GCC}/bin/arm-none-eabi-gcc",
            "compilerArgs": [
                "-mcpu=cortex-m4",
				"-mthumb",
				"-mfloat-abi=hard"
            ],
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "clang-x64",
            "macFrameworkPath": [
                "/System/Library/Frameworks",
                "/Library/Frameworks"
            ]
        }
    ],
    "version": 4
}

上記のURLと異なって、envをe_cpp_properties.json上に書いていたり少し異なるところがあります。
環境によってdefinesBOARD_CONFIGS140などの値が異なりますが、ここで一番重要なところ
defines内の__STATIC_INLINE= static inlineです。
__STATIC_INLINEマクロが解決できず色々なところに影響を与えてたみたいなので、強制的に定義してあげると参照エラー問題が解決しました。

めでたしめでたし:relaxed:

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?