Forum: Mikrocontroller und Digitale Elektronik Probleme mit Stack


von Oktupus (Gast)


Angehängte Dateien:

Lesenswert?

Habe ein Prog geschrieben, es ist allerdings noch nich fertig dennoch
habe ich schon die ersten Probleme.

Der Stack will nicht so wie ich will, nach aufrufen des Unterprogramms
soll er mit ret zurück hüpfen, tut er, aber nur insofern das er zum
Programm anfang und nicht zum Aufruf des Unterprogramms hüpft, hat wer
ne idee ?

Danke im vorraus

von Oktupus (Gast)


Angehängte Dateien:

Lesenswert?

hup sorry kurz ne korrektur bzw. ab rcall ausgang braucht eigentlich nix
mehr zu interessieren da, das problemm ja nur mit ret zusammenhängt !

von crazy horse (Gast)


Lesenswert?

tja, was soll man dazu sagen?
push, push, push... und dann soll sich der kleine ret die richtige
Adresse selbst rausfischen? Oder wie denkst du dir das? Push/pop und
call/ret benutzen den gleichen stack und den gleichen SP.

von Martin Jansen (Gast)


Lesenswert?

bin mir net sicher, aber ich glaub du hast das problem, dass der
controller net mehr weiss wo er "hinhüpfen" soll, denn in der
Stack-schleife schiebst du den eintrag wo die rücksprungadresse steht
immer weiter zurück.
ich weiss net ob du mir folgen kannst, aber ich mein dass es so ist,
das im nach nem "rcall" die rücksprungadresse als oberstes in den
stack gespeichert wird. wenn du jetzt via "push" neue daten
drüberschreibst, verliert der controller die orientierung.
wieso speicherst du die daten überhaupt im stack, das ist doch
eigentlich gar net nötig, oder?
hoffe ich hab net für allzuviel verwirrung gesorgt.
gruß
martin

von Martin Jansen (Gast)


Lesenswert?

tja, ich glaub da war ich ein bissl zu spät...
immerhin, ganze 4! minuten (die ich zum tippen brauchte g)

von Oktupus (Gast)


Lesenswert?

hm ok das Problem war mit einem einfachen rjmp gelöst ! Das ret scheint
tatsächlich meinen Stack zu mißbrauchen ;-) Zumindest wenn es etwas
anspruchsvoller wird.

Gibts denn ne möglichkeit dem die richtige stack adrese wieder
einzutrichtern ? ohne rjmp zu fuschen ?

von Oktupus (Gast)


Lesenswert?

@Martin

naja der stack bietet sich für ein lauflicht halt an wenn ich registe
nehme, baller ich mir ja die register weg !

von Oktupus (Gast)


Lesenswert?

@Martin

hups ich hätte es mit cbi PORTB, 3   lösen sollen ?

hmm <ggg> man staune man staune

von Martin Jansen (Gast)


Lesenswert?

du kannst die daten einfach in den flash schreiben, unn dann schön der
reihe nach einlesen, ich hab selbst so nen lauflicht geschrieben, ca.
100 Zustände im Flash, ist kein prob, aber auf dem stack wirds eng!

was sollte das mit cbi PORT,3 ?

von Oktupus (Gast)


Lesenswert?

@Martin

hmm stellste dein lauflicht mal rein ?
cpi ? Port aktivieren oder halt nicht !

von Martin Jansen (Gast)


Angehängte Dateien:

Lesenswert?

sicher kann ich das, siehe anhang,
von wegen cpi, den befehl kenn ich auch, danke!
jetzt weiss ich aber immer noch net was der bezwecken sollte.

von Martin Jansen (Gast)


Lesenswert?

ok, hab mich vertan, sind sogar mehr als 200!

von Oktupus (Gast)


Lesenswert?

Naja habe es jetzt so gemacht

sub1:
sbi PORTB, 0
sbi PORTB, 1
sbi PORTB, 2
sbi PORTB, 3
sbi PORTB, 4
sbi PORTB, 5
sbi PORTB, 6
sbi PORTB, 7
ret

da sdi eidnger anspringen.
Fange gerade erst mit avrs an , deshalb wunder dich nicht wenn meine
Lösungen nicht ganz so elitär sind ! :-) bin trotzdem glücklich wenns
klappt !

von Martin Jansen (Gast)


Lesenswert?

kleiner tipp, was du da gemacht hast, geht auch viel einfacher!

sub1:
ldi r16, 0xff
out portb, r16
ret

gruß
martin

von Oktupus (Gast)


Lesenswert?

ja ! aber doch alle aufeinmal ich will die langsam hinterienander
anmachen, natürlich muß noch ein delay da rein aber kommt ja noch !

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.