Arduino "interne" #defines (z.B. defined(ARDUINO))

Hallo Liste,

gibt es irgendwo eine Aufstellung aller (arduinointernen) defines wie sie in
#if defined(ARDUINO) && ARDUINO >= 100
verwendet werden ?

Schön wäre ein define, das irgendwie das Source-Verzeichnis des aktuellen Sketch enthält.

Danke & Grüße

Harry

hi,

das source-verzeichnis des sketches ist doch sinnlos, weil er auf den arduino gespielt wird.

was genau willst Du?

gruß stefan

HarryR:
gibt es irgendwo eine Aufstellung aller (arduinointernen) defines wie sie in
#if defined(ARDUINO) && ARDUINO >= 100
verwendet werden ?
Schön wäre ein define, das irgendwie das Source-Verzeichnis des aktuellen Sketch enthält.

Wie wäre es, wenn du dir mal die Arduino.h anschaust?
Und natürlich die ganzen anderen darin eingebundenen include Dateien?

Eisebaer:
hi,

das source-verzeichnis des sketches ist doch sinnlos, weil er auf den arduino gespielt wird.

was genau willst Du?

gruß stefan

Das Sketch-Verzeichnis könnte die Versionsnummer enthalten und ich könnte sie extrahieren.

Beispiel : /home/harry/Arduino/HRWinder_ver25

Wäre das Verzeichnis als String "defined" könnte ich das "ver25" automatisch übernehmen ...

Allgemein würden mich aber auch alle vordefinierten defines interessieren.

Grüße

Harry

combie:
Wie wäre es, wenn du dir mal die Arduino.h anschaust?
Und natürlich die ganzen anderen darin eingebundenen include Dateien?

Die Arduino.h ist ein guter Tipp. Das ist natürlich statischer Content.
Gibt es auch #defines/Konstanten/etc, die vom Compiler oder von der Oberfläche
zur Verfügung gestellt werden ?

Grüße Harry

Du solltest sagen, was du "wirklich" erreichen möchtest.....

Eine kleine Auswahl:

void setup() 
{
  Serial.begin(9600); 
  Serial.println(__FILE__);
  Serial.println(__LINE__);
  Serial.println(__BASE_FILE__);

}

void loop() 
{
 
}

Also mir ist aus dem GCC ansonsten nur noch Kompilierzeit/datum bekannt. Für den Rest musst du selber sorgen.

#define __PROJECT__	"m328p_bottlelightv2"
print_header(__PROJECT__);

void print_header(const char *s)
{
	printf(" *  Projekt : %s\n", s);
	printf(" * Erstellt : %s %s\n", __DATE__, __TIME__);
	printf(" *   Author : sschultewolter\n\n");
}

Es gibt auch auch noch Dinge die vom eingestellten Prozessor abhängen wie AVR/ARM und der Prozessor-Typ (AVR__ATmega_328P, etc.)

Das sind sicher nicht alle, aber zumindest ein paar:

// This sketch will print some of interesting predefined constants to Serial.
//
// For more information, look at
// http://electronics4dogs.blogspot.com/2011/01/arduino-predefined-constants.html
// helper macro

#define LINE(name,val) Serial.print(name); Serial.print("\t"); Serial.println(val);

void setup()  {
    Serial.begin(9600);

    // Compile file path (internal file of compilation proccess)
    LINE("__FILE__", __FILE__);

    // Current line (but in __FILE__)
    LINE("__LINE__", __LINE__);

    // Name of current function
    LINE("__func__", __func__);

    // Date of compliation
    LINE("__DATE__", __DATE__);

    // Time of compilation
    LINE("__TIME__", __TIME__);

    // Version of comilator (avr-gcc)
    LINE("__VERSION__", __VERSION__);

    // Counter
    LINE("__COUNTER__",__COUNTER__); // 0
    LINE("__COUNTER__",__COUNTER__); // 1
    LINE("__COUNTER__",__COUNTER__); // 2

    Serial.println("\nCPU:");
    #if defined(__AVR_ATmega168__)
    // Arduino Diecimila and older
    LINE("__AVR_ATmega168__", __AVR_ATmega168__);
    #endif

    #if defined(__AVR_ATmega328P__)
    // Arduino Duemilanove and Uno
    LINE("__AVR_ATmega328P__", __AVR_ATmega328P__);
    #endif

    #if defined(__AVR_ATmega2560__)
    // Arduino Mega 2560
    LINE("__AVR_ATmega2560__", __AVR_ATmega2560__);
    #endif

    #if defined(__AVR_ATmega1280__)
    // Arduino Mega
    LINE("__AVR_ATmega1280__", __AVR_ATmega1280__);
    #endif

    #if defined(__AVR_ATmega32U4__)
    // Arduino Leonardo
    LINE("__AVR_ATmega32U4__", __AVR_ATmega32U4__);
    #endif

    #if defined(__SAM3X8E__)
    // Arduino Due
    LINE("__SAM3X8E__", __SAM3X8E__);
    #endif

    // Determine board type
    #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__)
    Serial.println("Regular Arduino");
    #elif defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
    Serial.println("Arduino Mega");
    #elif defined(__AVR_ATmega32U4__)
    Serial.println("Arduino Leonardo");
    #elif defined(__SAM3X8E__)
    Serial.println("Arduino Due");
    #else
    Serial.println("Unknown");
    #endif
    Serial.println("\nArduino:");

    // Arduino SW version
    LINE("ARDUINO", ARDUINO);

    // Oscillator frequency
    LINE("F_CPU", F_CPU);
}

void loop(){ 
}

Hallo zusammen,

danke für die vielen Antworten.

Nochmal kurz zur Motivation:

a) Neugier, man kann nie genug wissen, außerdem weiß ich leider nicht, was ich nicht weiß :slight_smile:

b) Automatisches "Versionsgenerieren" zb via FILE
(ich arbeite gerade an einem Projekt, bei dem ich gerne die
aktuelle Version des Sketch auf dem LCD anzeigen würde)

Vielen Dank, Grüße und ein schönes Weihnachtsfest

Harry