Forum: Compiler & IDEs Unterschied im "Kompilat" zw. Arduino-IDE Atmel-Studio


von Noob A. (strippenzieher)


Lesenswert?

Hallo,

ich versuche gerade einem Problem mit einem Arduino-Mega auf die 
Schliche zu kommen. Das Ganze ist recht umfangreich (mehrere I²C 
Sensoren, Webserver, Telnet, RS232).
Um besser zu verstehen was wann passiert hab ich den sketch in Atmel 
Studio importiert um mit dem Atmel ICE besser debuggen zu können.

Komischerweise tritt der Fehler nicht auf wenn ich im Atmel Studio 
kompiliere. Egal ob debug oder release!

Mir ist bewusst dass da unterschiedliche Compiler laufen, aber dass das 
so krass unterschiedliche Resultate produziert find ich schon seltsam...

Hat das noch wer festgestellt, und evtl. sogar eine Erklärung parat?

von Programmierer (Gast)


Lesenswert?

Bob A. schrieb:
> Mir ist bewusst dass da unterschiedliche Compiler laufen, aber dass das
> so krass unterschiedliche Resultate produziert find ich schon seltsam...

Der winzigste Unterschied kann eine große Wirkung haben. Bei 
fehlerhaftem Code, welcher sich auf ein bestimmtes Verhalten des 
Compilers verlässt (undefined behaviour), kann das schnell schief gehen, 
wenn die Compiler Version, Optionen, Umgebung... anders ist. In erster 
Näherung: Alle Warnungen aktivieren und beheben.

von Noob A. (strippenzieher)


Lesenswert?

Warnungen sind alle an, sowohl in der Arduino IDE als auch in AS7
Läuft ohne jegliche Meldung in beiden durch.

Das Problem ist dass das Programm nach einem loop-Durchlauf hängen 
bleibt.
Eine Lösung war lokale String-Definitionen aus einer Funktion global in 
der Datei zu definieren.
Habs hier auch noch ein bischen ausführlicher beschrieben: 
Beitrag "Arduino Mega hängt wenn String nicht global definiert ist"

Irgendwie kapiere ich es nicht was da abgeht...

von Programmierer (Gast)


Lesenswert?

Das ist so jetzt schwierig zu analysieren. debugge doch das von Arduino 
erzeugte Binary (ELF) in Atmel Studio. Oder wähle in Atmel Studio die 
Toolchain von Arduino aus zum kompilieren...

von Programmierer (Gast)


Lesenswert?

Wobei das eher nach Stack Overflow o.ä. klingt, was durch abweichende 
Linker Scripte ausgelöst werden könnte.

von leo (Gast)


Lesenswert?

Bob A. schrieb:
> Eine Lösung war lokale String-Definitionen aus einer Funktion global in
> der Datei zu definieren.

Arduino Strings != std::string - das sind unterschiedliche Bibliothken, 
die du beide vermeiden solltest.

leo

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.