Skip to content

SDK_BuildOptions

朝日薫 edited this page Dec 17, 2022 · 1 revision

Build Optipns

Arduino IDE のツールサブメニューで設定されるマクロ定数について。 これらはスケッチメニューの検証・コンパイル またはマイコンボードに書き込むを実行する度に毎回再設定される。 その際のライブラリ生成&キャッシュにも毎回反映される。

ARDUINO

スケッチビルドに使われた Arduino IDE バージョン/メジャー/マイナー番号。 例えばv1.8.19なら 10819 が定義される。数値はVMMNN 形式。

ARDUINO_AVR_***

選択中の SDKビルドバリアント種別を現すマクロ宣言。definedで識別する。
例えば ARDUINO_AVR_ATMEGA4808 など。

ここに現れる名称はIDEボードメニュー選択に依存するので、 より厳密な型番固有判定には<avr/io.h>で設定される
__AVR_ATmega4808__などを調べること。

ARDUINO_ARCH_***

選択中の SDKビルドコア種別を現すマクロ宣言。definedで識別する。 例えば ARDUINO_ARCH_MEGAAVR など。

CONSOLE_BAUD

Console選択で設定されるUARTボーレート既定値。
Serial周辺機能設定時に参照すると良い。使用は任意。

/* メニュー指定値で既定UART初期化 */
Serial.begin(CONSOLE_BAUD);

DEBUG

Build Option選択で設定されるマクロ宣言/定数。 メニューでは12を選べる。
NDEBUG設定時は未設定。 使用は任意。

#if (DEBUG == 2)
  Serial.printDump(valueStore, sizeof(valueStore), ':');
#

ENABLE_MACRO_API

Build API選択でMacro API Enable選択時に定義されるマクロ宣言。definedで識別する。 これは<Arduino.h><api/macro_api.h>インクルード時に参照され、 例えばdigitalWriteMacrodigitalWrite別名マクロが追加される。 選択でEnable以外にすると定義されない。

スケッチ.inoファイルでは<api/macro_api.h><Arduino.h>から間接的に既定インクルードされるが、 その他のC言語.c C++言語.cpp アセンブラ.Sファイルではそうではないことに注意。

スケッチ.inoは必ず<Arduino.h>を強制インクルードする。

F_CPU

Clockを選ぶことで設定されるマクロ定数。単位はHz、接尾子L。 既定値は選択中のボードによって異なる。

この値はスタートアップコードにて、CLK_PER マスタークロックを AVR に設定する際に参照される。 また各種delay関数や計時器周辺機能の初期化に際しても参照される。

/* 指定マイクロ秒の遅滞時間生成 */
void delay_micros (uint32_t _us) {
  /* マイクロ秒単位を CLK_PER 単位に変換して遅滞 */
  __builtin_avr_delay_cycles((F_CPU / 1000000L) * _us);
}

LED_BUILTIN

BootloaderConsole and LED選択で定義される既定LED指示マクロ宣言。 内容はボード定義に依存したPIN_P**を示す。 通常はブートローダーが使用できる、ユーザー制御可能なLED端子名である。

LED制御が正論理か負論理かはボードに依存し、マクロ判別できるかは限らない。
複数のLED制御が可能な場合は別途追加のマクロ定義がある場合もある。

NDEBUG

Build Option選択で設定されるマクロ宣言/定数。 標準C言語ライブラリ<assert.h>の効果を失わせる。 これが定義されている場合、DEBUGは普通未定義。

SKETCH_PATH

スケッチ.inoを含むフォルダの絶対パスを保持しているマクロ定数。 ダブルクォートはされていない。また末尾にパス区切子/\\を持たない。

  • スケッチ.ino以外の、キャッシュされる可能性のあるライブラリファイル中では参照すべきではない。

実際の使用例は[Import_BinFileサンプル]を参照のこと。

Serial

BootloaderConsole and LED選択で定義される既定UART指示マクロ宣言。使用は任意。
通常は Arduino IDE のシリアルモニタに出力できる UART周辺機能の (Macro/Micro APIが定義する) クラスインスタンス名を別名として保持している。 その実態はボード/バリアント定義依存。

ATtiny10のような USART周辺機能のない品種では未定義。

/* メニュー指定値で既定UART初期化 */
Serial.begin(CONSOLE_BAUD);

複数UART選択可能な場合はSerial1 Serial2等の追加のマクロ定義がある。
真の(マクロではない)クラスインスタンスにはSerial0A Serial0B等の PORTMUX選択枝番が付いている。

  • UARTクラスインスタンス実体(HarfUART)のリンク結合は、リンクプロセスまで遅延される。 つまりそれを示すマクロがコード中の何処にもないのであれば(結果はコンパイル最適化によって除外され) 実体もまた結合されないことに注意されたい。

SW_BUILTIN

BootloaderConsole and LED選択で定義される既定ボタン指示マクロ宣言。 内容はボード定義に依存したPIN_P**を示す。 通常はブートローダーが使用できる、ユーザー認識可能なボタン端子名である。

Curiosity Nanoのような既製品の使用を選択した場合にのみ定義される。

UPLD_MAX_SIZE

ユーザー使用可能領域に割り当てられたフラッシュメモリ実効量をバイト数で返す。 ブートローダーを使用している場合は、その予約領域量を減じている。

スケッチ量を差し引いた真のフラッシュメモリ空容量を取得するには、
__nvmem_endシンボルなどを参照して計算すること。
[FlashNVM_fillspaceサンプル]が詳しい。

USE_PRINTF_FLT

Build "printf"選択で、浮動小数点拡張を有効化していると定義されるマクロ宣言。 Serial.printf%f指示子が使用可能なことを示す。

LINKS

multix.jp/てくにかるむ(休眠中)
Multix Zinnia Product SDK [*AVR]
AVR.JP(日本語訳)
AVR-LIBC(日本語訳)

Clone this wiki locally