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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bob A. (strippenzieher)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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 Bob A. (strippenzieher)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von leo (Gast)


Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.