www.mikrocontroller.net

Forum: Compiler & IDEs Funktionsaufruf beim ATmega128 schlögt fehl


Autor: Jörg Haas (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

der avr-gcc scheint "Mist" zu übersetzen

test.c  -> test.obj, (entspr. makefile)   siehe anhang

daraus folgt dann daß der Stack offenbar nicht (richtig)
initialisiert wird und das Programm beim ersten Benutzen
einer Funktion abschmiert (die FAQ im
Dokumentavr-libc-user-manual-1.0.3.pdf
(die meinte J.Wunsch wohl mit "FAQ lesen bildet") habe ich gelesen).

Wenn ich es inline in die main schreibe geht alles...

Gruß
joh

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

FAQ lesen bildet! Bei deinem neuen Mega128 ist die Mega103C Fuse
gesetzt. Damit arbeitet der 128 im 103 Kompatibilitätsmodus. Der
Stackpointer wird aber für den 128 initialisiert. Dann geht halt der
erste Funktionsaufruf schief.

Matthias

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleine Korrektur: der Funktions*aufruf* geht noch gut, aber der RET
der ersten Funktion liest dann Unsinn statt einer Rücksprungadresse.
Damit ist das typische Symptom, dass zwar die Funktion selbst noch
ausgeführt wird, aber danach die Applikation abstürzt.

Autor: Jörg Haas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi abermals,

also wenn ich mir mit Ponyprog mal
die Fuses auslese, ist da bei 103 compatibility
ein Haken was 0 also programmiert bedeuted.
lt. Mega128 datasheet heißt das wiederum, das der
im 128er Modus läuft...

Gruß
joh

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

@Jörg W.
Stimmt. Ich wollte das nicht soweit ausführen.

@Jörg H.
nein. Wenn M103C programmed ist läuft der 128 im 103 Modus.

Matthias

Autor: Jörg Haas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

@Matthias
Oje, da hab ich wohl einen Inverter im Hirn :)
Allerdings sah schon der Objektcode komisch
(=es wurde beim Funktionsaufruf ein call zu Adr.0
erzeugt, wo ja eigentlich der Resetvektor
steht?) deshalb hab ich ihn auch angehängt.

Gruß
joh

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

das call 0x0 dürfte daher kommen das der Linker die Adresse noch nicht
aufgelöst hat. Aber Jörg W. kann dir da sicher eher Auskunft geben.

Bei solchen, vermeintlichen, Bugs des Compilers sollte man sich erstmal
klarmachen das das eine absolute Grundfunktionalität des Compilers ist.
Wenn das schon schief geht hat man entweder eine Pre-Alpha oder aber
einen eigenen Denkfehler.

Matthias

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.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

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