ソースを作成する際に、プラットフォームやフレームワークを識別するためのマクロをどう決定するのかについて。
Arduino-Visual Studio Codeでの開発に書いてあるののPlatformIO版。
現在、PlatformIOの開発で利用しているプラットフォームは、Atmel AVR、Espressif 32、Raspberry Pi RP2040の3つ。
フレームワークはArduinoとEspressif IoT Development Frameworkの2つ。
ライブラリ用ソースを記述する際に、これらプラットフォーム、フレームワークを識別して記述したいため、ソース内にifdefで区分けを付けたいことがよくある。
ただ、ifdefの区分けをするためのマクロとして何を利用するべきなのかという情報はあまり公開されていない。
前回のArduino IDE環境下ではコンパイル時のログレベルを変更し、ログファイルから求めるような形にしたのだが、PlatformIOではもっと簡単に調べることができた。
[env]
monitor_speed = 115200
lib_extra_dirs = lib
[env:espidfesp32]
platform = espressif32
board = esp32dev
framework = espidf
[env:arduinoesp32]
platform = espressif32
board = esp32dev
framework = arduino
[env:arduinouno]
board = uno
framework = arduino
platform = atmelavr
例えば、上のようなplatform.iniの場合、2種類のプラットフォーム、2種類のフレームワークを組み合わせた3種類の環境の定義となっている。
この設定を行うと、画面下のPlatformIOの環境スイッチャを選択すると、デフォルト+3種類の環境が選択できるようになる。
これで調べたい環境を選択すると、.vscode/c_cpp_properties.jsonが再構築される。
このファイルの中のdefinesに書かれているのがコンパイル時のマクロの設定内容となる。
環境ごとに見てみると、以下の様な出力がされた。
この定義をもとにソースの切り分けをするのが良いかもしれない。
espidfesp32
"defines": [
"_GNU_SOURCE",
"IDF_VER=\"4.3.0\"",
"ESP_PLATFORM",
"PLATFORMIO=50101",
"ARDUINO_ESP32_DEV",
""
],
arduinoesp32
"defines": [
"PLATFORMIO=50101",
"ARDUINO_ESP32_DEV",
"ESP32",
"ESP_PLATFORM",
"F_CPU=240000000L",
"HAVE_CONFIG_H",
"MBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\"",
"ARDUINO=10805",
"ARDUINO_ARCH_ESP32",
"ARDUINO_VARIANT=\"esp32\"",
"ARDUINO_BOARD=\"Espressif ESP32 Dev Module\"",
""
],
arduinouno
"defines": [
"PLATFORMIO=50101",
"ARDUINO_AVR_UNO",
"F_CPU=16000000L",
"ARDUINO_ARCH_AVR",
"ARDUINO=10808",
"__AVR_ATmega328P__",
""
],
コメント