Bedingte Kompilierung, abhängig vom Board

Hallo,

ich würde gerne meinen Code so anpassen, dass abhängig vom verwendeten Board und ob ich überhaupt ein Arduino verwende, oder einfach nur Mal erstmal so auf dem Laptop kompiliere. Gibt es da eine bestehende Liste?

Liebe Grüße.

Mummel:
Gibt es da eine bestehende Liste?

Da gibt es wahrscheinlich mehrere verschiedene Listen, je nachdem wonach Du Deine bedingte Compilierung unterschieden möchtest.

Am simpelsten wäre erstmal eine Unterscheidung nach Plattform, also ob Du z.B. ein Board mit 32-Bit ARM Controller eingestellt hast, oder eines mit 8-Bit AVR-Atmega-Controller:

#if defined(__arm__) 

// insert code for Arduino boards with ARM controller here

#elif defined(__AVR__) 

// insert code for Arduino boards with Atmega controller here

#else

#error Architecture or board not supported.

#endif

Aber im Endeffekt kannst Du auch einzelne Controllertypen unterscheiden und verschiedenen Code compilieren, wenn Du die bedingte Compilierung davon abhängig machen möchtest, ob das Programm für Atmega328, Atmega2560 oder Atmega32U4 compiliert werden soll.

oder einfach nur Mal erstmal so auf dem Laptop kompiliere

Da geht relativ wenig Arduino-spezifisches. Serial.println();  und digitalRead(2); läuft nun mal nicht auf dem Laptop.
Aber nur kompilieren (Verifizieren) kannst du auf dem Laptop, auch wenn kein Arduino angeschlossen ist.


Das geplante Ziel wird dem Compiler übrigens auch über ein #define mitgegeben. Schau dir mal den Aufruf (ausführliche Ausgabe) an:

"C:\Program Files (x86)\Arduino\1.6.7\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\Program Files (x86)\Arduino\1.6.7\hardware\arduino\avr\cores\arduino" "-IC:\Program Files (x86)\Arduino\1.6.7\hardware\arduino\avr\variants\eightanaloginputs" "C:\Users\m\AppData\Local\Temp\build36d9f3f50095dd78abeab3107744b393.tmp\sketch\sketch_feb27b.ino.cpp" -o "nul"

-DARDUINO_AVR_NANO bedeutet, dass du in deinem Sketch sowas machen kannst:

#ifdef ARDUINO_AVR_NANO 
// dies hier wird kompiliert, weil als Ziel Arduino Nano ausgewählt war.
#endif

Der Tipp mit den Aufrufen ist super.
Ich habe mich nun allerdings etwas allgemeiner gehalten. Habe endlich die Arduino.h gefunden:

https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/Arduino.h

und benutze ganz Pauschal erstmal #ifdef Arduino_h . IM Header stehen aber auch viele andere lustige Sachen drinne.

Darauf hätte man ja auch eigentlich so kommen können. :wink:

Vielen Dank!