動機
Arduino開発、ファイルを分割してC/C++で書く、VSCodeで開発環境の整備を行いましたが......
Arduino for Visual Studio Code が、そろそろヤバそう(deprecated)
PlatformIOで、少し悩んだ部分を記録しておきます。
が、ぶっちゃけ、Arduino for Visual Studio Codeよりだいぶ楽でした。
※この記事を読む方にお願いしたいこと
Warningを最大限出す設定(-Wall)としてほしい。
最大限はどうしても許容しがたくても、必ずWarningは出す設定とし、コーディングしてほしい。
実行しないとわからない、かもしれない、もしかしたら実行した結果大丈夫かもしれないし、ダメかもしれない、
......のと、
コンパイルしたらダメっぽいのがわかる
......のでは、雲泥の差があります。時は金なり。
粗悪なコードでのArduino界隈の汚染を防ぎましょう。
目標
- ソースコードのフォルダ分けができること
- 出来上がったelfやhexがアクセスしやすい場所に配置されること
- 可能な限り厳しいワーニングレベル(-Wall)でコンパイルされること
インストール、プロジェクト作成
省略します。他の方々が散々やってくれているので......
Arduino PlatformIO などでググるべし。
結果
ソースコードのフォルダ分けができること
srcディレクトリ以下にソースコードを配置すれば、ビルドするメンバにはしてくれます。ただし、platformio.iniに、インクルードディレクトリの指定が必要。
build_flags =
-Isrc/Module01
出来上がったelfやhexがアクセスしやすい場所に配置されること
普通にできてました。素晴らしい。Excellent!
.pioディレクトリ以下に出来上がります。
後は、objdumpできればなー......これはまた後か。
可能な限り厳しいワーニングレベル(-Wall)でコンパイルされること
-w(全ての警告メッセージを抑制します。)を除外する設定を行う。
build_unflags =
-w
なんか知らんが-wが入っている。(なぜバレたかは後述Tips参照) 極めて有害で理解しかねる。
いくら-Wallしても出てこないのでなんで?って思ってたら、しれっと入っていたので除外します。
最終的に、以下の設定となりました。
build_unflags =
-w
build_flags =
-Isrc/Module01
-Wall
※build_flagsの-Wallは、現状、実はいらないのですが、一応入れています。
Tips(Verbose modeでビルドする)
可能な限り厳しいワーニングレベル(-Wall)でコンパイルされること
が、最初分からなかった。build_flagsに-Wallを指定しても出てこない。そもそもWarning自体出てこない......?
これを解決するにあたり、どんなオプションでコンパイルされているのか知りたい。で......
ビルド時TERMINALに以下のような表示があったため
Verbose mode can be enabled via `-v, --verbose` option
じゃあそれどうすんの、がなかなか見つからなかったのですが、結局以下の方法で行いました。何か他にいい方法をご存じの方はコメントください。
ターミナルを開く
以下のコマンドを実行する
PS <project_dir>> C:\Users\<Username>\.platformio\penv\Scripts\platformio.exe run -v
すると、Verbose mode でビルドが実行される。
ちなみに、そのときのコンパイルオプション
arm-none-eabi-gcc -o .pio\build\uno_r4_wifi\src\Module01\Module01.c.o -c -std=gnu11 -Waggregate-return -Wall -Wconversion -Wextra -Wfloat-equal -Wlogical-op -Wmissing-declarations -Wpointer-arith -Wshadow -Wuninitialized -Wunused -fdata-sections -ffunction-sections -fmessage-length=0 -fsigned-char -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mthumb -Os -iprefixC:/Users/Username/.platformio/packages/framework-arduinorenesas-uno @C:/Users/Username/.platformio/packages/framework-arduinorenesas-uno/variants/UNOWIFIR4/includes.txt -w -fno-builtin -DPLATFORMIO=60116 -DARDUINO_UNOWIFIR4 -DARDUINO_ARCH_RENESAS_UNO -DARDUINO_UNOR4_WIFI -DNO_USB -DBACKTRACE_SUPPORT -DLWIP_DNS=1 -DCFG_TUSB_MCU=OPT_MCU_RAXXX -D_RA_CORE=CM4 -D_RENESAS_RA_ -DARDUINO=10810 -DARDUINO_ARCH_RENESAS -DARDUINO_FSP -D_XOPEN_SOURCE=700 -DF_CPU=48000000L -Iinclude -Isrc -Isrc\Module01 -IC:\Users\Username\.platformio\packages\framework-arduinorenesas-uno\cores\arduino\tinyusb -IC:\Users\Username\.platformio\packages\framework-arduinorenesas-uno\cores\arduino -IC:\Users\Username\.platformio\packages\framework-arduinorenesas-uno\cores\arduino\api\deprecated -IC:\Users\Username\.platformio\packages\framework-arduinorenesas-uno\cores\arduino\api\deprecated-avr-comp -IC:\Users\Username\.platformio\packages\framework-arduinorenesas-uno\variants\UNOWIFIR4 src\Module01\Module01.c
なげーよ!
って......あ......
ア゛ツツツツッツーーーーーーー!
あ゛に゛き゛ぃぃぃぃぃいいいいーーー!