Forum: Mikrocontroller und Digitale Elektronik AVR Assembler: ret springt an falsche Stelle zurück


von Bernd S. (dasberndi)


Angehängte Dateien:

Lesenswert?

Hallöle

Mein Problem ist,das bei (bis jetzt) zwei includierten Unterprogrammen 
das ret nicht an die richtige Stelle springt.
Bis jetzt habe ich nur wait.asm, reedelundhibyte.asm und 
writeelundhibyte.asm sinnvoll verwendet.
Beim wait springt er zurück, wie es sich gehört. Bei reedelundhibyte 
springt er ins writeelundhibyte und sofort wieder raus, an die richtige 
Stelle und bei writeelundhibyte springt er in die Kommentarzeile EEPROM 
und dann sofort an die richtige Stelle. Also immer eine Zeile hinter 
sein .include.
Das Prg ist nicht gekürzt. Die HW steht oben drin. Geschrieben und 
getestet ist es im AVRStudio6 mit dem Simulator.
 Ich suche schon ewig rum, warum er das tut. Im Forum waren für so 
Sachen immer nicht gesetzte Stapel verantwortlich. Aber der Stapel ist 
da und funzt bei wait ja auch.
 Vielleicht kann mir ja einer einen Tip geben, welchen Wald ich vor 
lauter Bäumen nicht sehe.

Danke und Gruß

Bernd

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>ldi tmp,low(eeelwl)
>out eearl,tmp              ;Adresse lowbyte
>ldi tmp,high(eeelwl)
>out eearh,tmp              ;Adresse highbyte

Datenblatt:

To do a 16-bit write, the High byte must be written before the Low byte. 
For a 16-bit read, the Low byte must be read before the High byte.


>!!!!!!!!!!!!ab hier dürfen keine IR kommen!!!!!!!!!!!!!!!!!!

>;!!!!!!!!!!!!ab hier dürfen wieder IR kommen!!!!!!!!!!!!!!!!!

Und du meinst die Interrupts lassen sich von den Kommentaren 
beeindrucken?

Da must du schon selbst Hand anlegen.

Mit etwas geplanteren Programmierung würde das gleiche Ziel mit max. 10% 
des Programmcodes auskommen.

MfG Spess

von Yalu X. (yalu) (Moderator)


Lesenswert?

Das scheint eher ein Problem des Debuggers zu sein, allerdings kein
schlimmes:

Offesichtlich springt der Cursor bei Ausführen von RET erst einmal in
die darauffolgende Quellcodezeile. Das ist in wait.asm eine Leerzeile,
wo dies nicht weiter auffällt. Da in reedelundhibyte.asm und
writeelundhibyte.asm der RET-Befehl in der allerletzten Zeile steht, ist
die nächste Zeile die erste Zeile von writeelundhibyte.asm bzw. die
nächste Zeile in Orlyjonok.asm (das ist der Kommentar mit dem EEPROM).

Das scheint aber nur eine Eigenart des Debuggers zu sein, der
Programmlauf an sich war wohl korrekt, da deiner Aussage nach das
Debugging im nächsten Schritt an der richtigen Stelle fortgesetzt wurde.

Wenn dich dieses Verhalten des debuggers stört, kannst du ja am Ende
jeder Quellcodedatei eine Leerzeile einfügen, wo der Cursor hinspringt,
bevor RET in den aufrufenden Programmteil zurückkehrt.

Vielleicht kann jemand, der Gegensatz zu mir das AVR-Studio benutzt,
mehr dazu sagen.

von Bernd S. (dasberndi)


Lesenswert?

Oh!

Danke! Ich erröte grade.

Wegen der 10%. Ich bin noch am lernen. Deswegen gehe ich noch die tippel 
tappel Tour um es zu verstehen.

Jetzt z.B. interessiert mich brennend, was ein falsch rum geschriebenes 
Wort für einen Einfluss auf den Stapel hat.
Was zum denken/lesen für heute abend.

Also nochmal vielen Dank

von Bernd S. (dasberndi)


Lesenswert?

Nochmal Danke

Grade habe ich nochmal geguggt, habs aber in der Eile nicht gefunden.
Denn Wort-Dreher habe ich irgendwo rauskopiert.(Ich will mich nicht 
rausreden, nur den Fehler melden.)

Das mit den Leerzeilen probiere ich heute abend gleich mal aus.

Gruß   Bernd

von Amateur (Gast)


Lesenswert?

Der Stapel ist ein Stückchen Speicher, sonst nix.

Was Du da drauf legst ist völlig egal.

Legst Du von einem Wort erst den High-Teil und dann der Low-Teil ab - 
wen interessiert's?

Wichtig ist nur, dass Du anschließend erst den Low-Teil abholst und dann 
den High-Teil. Und natürlich wo und wie Du  diese zusammenfügst.

Zusammengefasst:
Es sollte alles im Rahmen (Platz) bleiben.
Jedes Byte, das abgelegt wird sollte, wenn irgend möglich, in der 
gleichen Funktion auch wieder abgeholt werden.
Fehler in diesem Bereich sind nicht ganz einfach zu finden.

von Bernd S. (dasberndi)


Lesenswert?

Ich nochmal

Die Kommentarzeilen wegen der IR sind nur Gedankenstützen. Irgendwann, 
später benutze ich noch die externen, spätestens dann muß ich sie dort 
ab- und wieder anschalten.

Gruss   Bernd

von Stefan E. (sternst)


Lesenswert?

Bernd S. schrieb:
> Grade habe ich nochmal geguggt, habs aber in der Eile nicht gefunden.
> Denn Wort-Dreher habe ich irgendwo rauskopiert.(Ich will mich nicht
> rausreden, nur den Fehler melden.)

Ist kein Fehler. Was Spess da zitiert hat, ist für EEAR irrelevant.

von Bernd S. (dasberndi)


Lesenswert?

Hallo Mädels

Eben habe ich das mit der Leerzeile nach dem ret ausprobiert.
Es funzt.
Auch ist mir aufgefallen, dass ich bei " sbi EECR,EEWE " und gleich 
danach bei " rjmp writeend " je zwei mal 'Step Into' drücken muß.

Schade, ich habe die HW noch nicht fertig. Sonst könnte ich es da mal 
testen.
Vielleicht liegts ja doch am Studio 6. Im Studio4 habe ich mal was 
ähnliches gebastelt, da ist sowas nicht passiert.

Naja, jedenfalls nochmal vielen Dank an Euch alle.

Gruß   Bernd

von spess53 (Gast)


Lesenswert?

Hi

>Vielleicht liegts ja doch am Studio 6. Im Studio4 habe ich mal was
>ähnliches gebastelt, da ist sowas nicht passiert.

Warum bist du nicht beim 4er Studio geblieben? Für Assembler bringt das 
6er Studio gar nichts.

MfG Spess

von c-hater (Gast)


Lesenswert?

spess53 schrieb:

> Warum bist du nicht beim 4er Studio geblieben? Für Assembler bringt das
> 6er Studio gar nichts.

Sogar noch viel schlimmer: Vieles geht einfach nicht mehr, was im 4er 
noch korrekt funktionierte.

von Bernd S. (dasberndi)


Lesenswert?

moin moin

Ja, gute Frage.
Ich wollte es einfach mal ausprobieren. Tüchtig aufgeblasen isses ja.
Es gibt da schon ein paar Sachen, die schöner sind. Wenn man sie 
gefunden hat.
Blöd ist,zB,dass man das erstellen der .eep Datei erst anschalten muss.
 Ich wollte schon mal zurück aber rückwärts konvertieren ist ja nicht, 
oder ich habs nicht gefunden. Und jetzt isses mir einfach zu umständlich 
die Projekte im Studio4 neu anzulegen.
Irgendwie erinnert es mich immer dran, was passiert, wenn man mit GIMP 
versucht auf einem Foto einfach rote Augen wegzumachen.

Euch allen einen schönen Tag.

Gruß   Bernd

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.