Jak zauważyłeś, odznaczasz cel płytki w środowisku programistycznym, aby kompilator mógł znać planszę. Niestety, IDE nie informuje bezpośrednio tej kompilacji o tej informacji. Tylko typ procesora i częstotliwość są przekazywane w dół.
Możesz zobaczyć, co robi IDE, aby skompilować programy. W menu preferencji włącz szczegółowe wyjście do kompilacji. Skompiluj szkic, a zobaczysz coś takiego:
C: \ Apps \ arduino-1.0-windows \ arduino-1.0 \ hardware \ tools \ avr \ bin \ avr-g ++ -c -g -Os -Wall -fno-wyjątki -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 \ versions \ standard C: \ Users \ Jim \ AppData \ Local \ Temp \ build4664216036291565363.tmp \ Blink.cpp -oC: \ Users \ Jim \ AppData \ Lokalne \ Temp \ build4664216036291565363.tmp \ Blink.cpp.o
Parametry -D określają, w jaki sposób środowisko Arduino przechodzi do preprocesora. Widać, że tylko szybkość procesora i wersja arduino są przekazywane w ten sposób.
Kołki IO definiuje się inaczej: IDE zawiera jeden folder zawierający plik nagłówkowy specyficzny dla płyty.
Ten -I argumentem zawiera folder na kompilatora ścieżce wyszukiwania:
-IC: \ Apps \ Arduino-1.0-windows \ Arduino-1.0 \ hardware \ Arduino \ \ wariantów standardowych
W tym folderze znajduje się plik pins_arduino.h odpowiedni dla wybranej tablicy. Jeśli wybierzesz inną płytkę, zobaczysz zmianę tego parametru.
Jeśli chcesz zmodyfikować konfigurację IDE, możesz uzyskać to, o co prosisz.
Aby uzyskać to, czego potrzebujesz, wystarczy uzyskać jedną dyrektywę #define. Oto jak wykonać
Krok 1. Stwórz własny typ płyty. Aby utworzyć nowy rodzaj płyty, zobacz plik boards.txt znajdujący się w tym folderze:
... \ Arduino-1.0 \ hardware \ Arduino
Linia takiego zdefiniowania standardu zawierać folder (w tym przypadku):
uno.build.variant=standard
skopiować cały blok, zmieniając nazwę i folder
myuno.name=My Arduino Uno
...
myuno.build.variant=myunoboard
Dzięki tej zmianie, gdy wybierzesz ten cel deska folder myunoboard zostaną umieszczone na komp ścieżka iler.
Krok 2. Utwórz nagłówek zawierający definicję.
W folderze
... \ Arduino-1.0 \ hardware \ Arduino \ warianty \ myunoboard
stworzyć plik pins_arduino.h. W tym pliku:
Krok 3. Powtórz dla kolejnych kart.
Zapewni to możliwość budowania kodu dla różnych celów zarządu.
Powiedziawszy to, nie polecam takiego podejścia. Jeśli zaczynasz myśleć o tworzeniu kodu, który działa w wielu celach, być może nadszedł czas, aby przejść z Arduino IDE. Jeśli korzystasz z środowiska takiego jak Eclipse, masz jeden projekt z dowolną liczbą konfiguracji kompilacji. Każda konfiguracja kompilacji może określać różne definicje preprocesora dla docelowej tablicy.
Po prostu próbowałem tego. Gdzie działa główny plik INO. Jednak wydaje się pliki biblioteki, nie są w stanie zobaczyć definicji pochodzi z variant/pin_arduino.h. Tak jak potrzebuję, aby różnica wystąpiła w .h niestandardowej biblioteki. – mpflaga
wydaje się, że mogę się mylić. wygląda na to, że nie mogę użyć #define nazwy pliku innej biblioteki. więc teraz wydaje się działać. – mpflaga
Powyższe jest teraz prawdziwe w przypadku IDE 1.5 zobacz https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification i parametr uno.build.board = AVR_UNO, which provide służy do ustawiania zmiennej czasu kompilacji ARDUINO_ {build.board} w celu umożliwienia użycia kodu warunkowego między #ifdefs – mpflaga