Funktionsaufruf beim ATmega128 schlögt fehl

Gast #178583
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
Angehängte Dateien:
Gast #178584
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
Gast #178585
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.
Gast #178586
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
Gast #178588
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
Gast #178589
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren