muss man extra den stackpointer initialisieren, wenn man rcall und ret verwendet,meiner meinung nach nicht denn wenn mann rcall macht dann wandert die rucksprungadresse automatisch zur stackhalde,wenn man dann ret verwendet ruft er die rucksprungadresse aus der halde wieder raus.stimmt das?
Salut, das stimmt soweit schon. Nur Deine Frage ist ja, ob man den Stackpointer initialisieren muß. Und das muß man. Denn gerade wenn man [r]call/ret verwendet, braucht der µC einen initialen Wert, vom dem aus er anfangen kann, zu dekrementieren bzw. inkrementieren. Zu Beginn enthält der Stackpointer imho einen undefinierten Wert, d.h. ohne Initialisierung schreibt er wild im RAM herum - und das geht meist böse aus. :} Der Startwert ist geräteabhängig und in den includes mit SPL bzw. SPH angegeben. Hoffe, das hilft. :) Mark H. -- http://markh.de
Der Startwert kann auf eine beliebige Stelle im RAM gesetzt werden, üblicherweise auf das Ende (RAMEND).
Salut, ahhh, 'tschuldigung!! Was hab ich denn da für Unsinn geschrieben! SPL und SPH... das sind natürlich die I/O-Register, in denen der Stackpointer liegt. Der Startwert ist (wie Andreas richtig sagt) üblicherweise das Ende des RAM... und das ist in den includes mit RAMEND abgelegt. Die Adressen von SPL und SPH stehen natürlich auch in den includes, aber das hat ja damit nix zu tun. Andreas hat's ja eigentlich schon klargestellt. Aber ich mußte mich korrigieren, um Dich nicht evtl. zu irritieren. Sorry für den kleinen Fauxpas. :} Mark H. -- http://markh.de/avr/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.