HarryR
December 20, 2015, 12:53pm
1
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
combie
December 20, 2015, 1:15pm
3
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?
HarryR
December 20, 2015, 1:20pm
4
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
HarryR
December 20, 2015, 1:23pm
5
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
combie
December 20, 2015, 1:33pm
6
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.)
uxomm
December 20, 2015, 5:39pm
9
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(){
}
HarryR
December 22, 2015, 12:33pm
10
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ß
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