すでに述べたように、開発環境でボードターゲットをチェックして、コンパイラがボードを認識できるようにします。残念ながら、IDEはコンパイラにこの情報を直接通知しません。プロセッサの種類と周波数のみが渡されます。
IDEがプログラムをコンパイルするために何をするかを見ることができます。環境設定メニューで、コンパイル用の詳細出力をオンにします。スケッチをコンパイルすると、次のようなものが表示されます。
C:\ Apps \ arduino-1.0-windows \ arduino-1.0 \ hardware \ tools \ avr \ bin \ avr-g ++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu = atmega328p -DF_CPU = 16000000L -DARDUINO = 100 -IC:\ Apps \ arduino-1.0-windows \ arduino-1.0 \ hardware \ arduino \ cores \ arduino -IC:\ Apps \ arduino-1.0-windows \ arduino-1.0 \ hardware \ arduino \ Variants \ standard C:\ Users \ Jim \ AppData \ Local \ Temp \ build4664216036291565363.tmp \ Blink.cpp -oC:\ Users \ Jim \ AppData \ Local \ Temp \ build4664216036291565363.tmp \ Blink.cpp.o
-Dは、Arduino環境がプリプロセッサに定義を渡す方法です。この方法では、CPU速度とarduinoバージョンのみが渡されることがわかります。
IOピンは別の方法で定義されます。IDEには、ボード固有のヘッダーファイルを含む1つのフォルダーが含まれています。
この-I引数には、コンパイラの検索パスへのフォルダが含まれています。
-IC:\ Apps \ arduino-1.0-windows \ arduino-1.0 \ hardware \ arduino \ Variants \ standard
そのフォルダには、選択したボードに適したpins_arduino.hファイルがあります。別のボードを選択すると、このパラメーターが変更されます。
IDE構成を変更する場合は、必要なものを入手できます。
したがって、必要なものを取得するには、1つの#defineディレクティブを取得する必要があります。だからここに方法があります
ステップ1.独自のボードタイプを作成します。新しいボードタイプを作成するには、次のフォルダにあるboards.txtファイルを参照してください。
... \ arduino-1.0 \ hardware \ arduino
このような行は、インクルードフォルダー(この場合は標準)を定義します。
uno.build.variant=standard
ブロック全体をコピーし、名前とフォルダーを変更します
myuno.name=My Arduino Uno
...
myuno.build.variant=myunoboard
この変更により、このボードターゲットを選択すると、myunoboardフォルダーがコンパイラパスに配置されます。
ステップ2.定義を含むヘッダーを作成します。
フォルダ内
... \ arduino-1.0 \ hardware \ arduino \ Variants \ myunoboard
ファイルpins_arduino.hを作成します。そのファイルで
#include "..\standard\pins_arduino.h"
#define BOARD MY_UNO
// and/or this form
#define __BOARD_MY_UNO
ステップ3.さらにボードについて繰り返します。
これにより、さまざまなボードターゲット用のコードを作成できるようになります。
そうは言っても、私はこのアプローチを本当にお勧めしません。複数のターゲットにまたがって実行されるコードの作成について考え始めている場合は、ArduinoIDEから移行する時期かもしれません。Eclipseなどの環境を使用している場合は、任意の数のビルド構成を持つ1つのプロジェクトがあります。ビルド構成ごとに、ボードターゲットに異なるプリプロセッサ定義を指定できます。