はじめに
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です。
{
"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上に書いていたり少し異なるところがあります。
環境によってdefines
のBOARD_CONFIG
やS140
などの値が異なりますが、ここで一番重要なところが
defines
内の__STATIC_INLINE= static inline
です。
__STATIC_INLINEマクロが解決できず色々なところに影響を与えてたみたいなので、強制的に定義してあげると参照エラー問題が解決しました。
めでたしめでたし