Hallo zusamme, mir fehlt eine kleine Information um den Stack im ATMEGA16 zu verstehen. Vielleicht kann einer weiterhelfen. RAM Adress | Bezeichner | Wert --------------------------------------- 0x005D | Stackpointer HB |0x01 0x005E | "" LB |0x30 ----------------------------------------- 0x0130 | ???? | Worauf zeigt der Stackpointer? Dachte er zeigt auf die Rücksprungadresse und ist dann 2 Byte groß. Wenn ich im Debugger den Speicher mit dem Disassambly vergleiche stimmt der Wert auf den der Stackpointer zeigt nicht mit der Rücksprungadresse im RAM überein. Bsp. ProgrammCounter Code 0x05 Funktion(); 0x06 a=b; RAM Adress | Bezeichner | Wert --------------------------------------- 0x005D | Stackpointer HB |0x01 0x005E | "" LB |0x30 ----------------------------------------- 0x0130 |Rücksprungadresse | hier sollte doch die Adresse (0x06) stehen die auf die nächste Zeile nach der Funktion() zeigt. hoffentlich versteht jemand was hier steht :D
gye schrieb: > hoffentlich versteht jemand was hier steht :D nein ... wo steht der PC wenn du den Stackpointer anschaust, wie sieht die funktion aus? Schau dir am besten den Assemblerfile an, dann siehtst du vielleicht klarer
@ gye (Gast) >RAM Adress | Bezeichner | Wert >--------------------------------------- >0x005D | Stackpointer HB |0x01 >0x005E | "" LB |0x30 >----------------------------------------- >0x0130 | ???? | >Worauf zeigt der Stackpointer? Auf die nächste freie RAM-Zelle. >Dachte er zeigt auf die Rücksprungadresse Nö, er ist schon eins weiter. >und ist dann 2 Byte groß. Wenn ich im Debugger den Speicher mit dem >Disassambly vergleiche stimmt der Wert auf den der Stackpointer zeigt >nicht mit der Rücksprungadresse im RAM überein. Beim call wird der PC erst auf dem stack gespeichert und DANACH dieser vermindert! In C nennt man das Postdekrement. *stack-- = pc; // Kurzform Bei push ist es ebenso. Beim return wird ZUERST der Stackpointer erhöht und danach der PC geladen. pc = *++stack;
->Nö, er ist schon eins weiter. Kein Wunder, dass ich die Adresse nicht finden konnte. :D Hinzu kommt, dass in der Disassembly die Adresse als Word steht.
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.