Arduino for Visual Studio Code to PlatformIO

# 動機

[Arduino開発、ファイルを分割してC/C++で書く、VSCode](https://qiita.com/somehiro/items/6a6d954be159b6a5fccd)で開発環境の整備を行いましたが......

Arduino for Visual Studio Code が、そろそろヤバそう(**deprecated**)
![deprecated.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082015/4519aa5b-53b4-71c8-0202-2bde444b84ab.png)

色々見た感じ、PlatformIOが良さそう。
![PlatformIO.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082015/ea12dcc0-c9d8-0911-0eca-e63a388c170d.png)

PlatformIOで、少し悩んだ部分を記録しておきます。
が、ぶっちゃけ、Arduino for Visual Studio Codeよりだいぶ楽でした。

# ※この記事を読む方にお願いしたいこと
**Warningを最大限出す設定(-Wall)としてほしい。**
**最大限はどうしても許容しがたくても、必ずWarningは出す設定とし、コーディングしてほしい。**

実行しないとわからない、かもしれない、もしかしたら実行した結果大丈夫かもしれないし、ダメかもしれない、

......のと、

コンパイルしたらダメっぽいのがわかる

......のでは、雲泥の差があります。時は金なり。

粗悪なコードでのArduino界隈の汚染を防ぎましょう。

# 目標
1. ソースコードのフォルダ分けができること
2. 出来上がったelfやhexがアクセスしやすい場所に配置されること
3. 可能な限り厳しいワーニングレベル(-Wall)でコンパイルされること

# インストール、プロジェクト作成
省略します。他の方々が散々やってくれているので......
Arduino PlatformIO などでググるべし。

# 結果
> ソースコードのフォルダ分けができること

srcディレクトリ以下にソースコードを配置すれば、ビルドするメンバにはしてくれます。ただし、platformio.iniに、インクルードディレクトリの指定が必要。

![ソースディレクトリ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082015/72014cb3-2647-0ac5-12a1-34d605174760.png)

```platformio.ini
build_flags =
    -Isrc/Module01
```

> 出来上がったelfやhexがアクセスしやすい場所に配置されること

普通にできてました。素晴らしい。Excellent!
.pioディレクトリ以下に出来上がります。
![ビルド結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082015/b1cee686-fdb3-fc89-c747-bfa70ac71f95.png)

後は、objdumpできればなー......これはまた後か。

> 可能な限り厳しいワーニングレベル(-Wall)でコンパイルされること

-w(全ての警告メッセージを抑制します。)を除外する設定を行う。

```platformio.ini
build_unflags =
    -w
```

なんか知らんが-wが入っている。(なぜバレたかは後述Tips参照)　**極めて有害で理解しかねる。**
いくら-Wallしても出てこないのでなんで？って思ってたら、しれっと入っていたので除外します。

最終的に、以下の設定となりました。

```platformio.ini
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
```
じゃあそれどうすんの、がなかなか見つからなかったのですが、結局以下の方法で行いました。何か他にいい方法をご存じの方はコメントください。

### ターミナルを開く

![openterminal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082015/614207f5-0004-1ecc-bab2-72b49c6b33f0.png)

ターミナルが開く。
![terminalopened.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082015/f5b86303-9b87-8a8e-02ef-745db771771b.png)

### 以下のコマンドを実行する
```
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

**なげーよ！**
って......あ......
ア゛ツツツツッツーーーーーーー！
![しれっと-w.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1082015/609652c9-37d4-fd43-f5af-95e8bdf7edd8.png)


あ゛に゛き゛ぃぃぃぃぃいいいいーーー！