Hallo, ich hab da mal eine Stilfrage zum Stack. Normalerweise initialisiert man ihn ja mit high und low RAMEND. wenn man aber möchte, dass der Stack nicht in den Teil des RAM rein kommt, den man selber nutzt, kann man ihn doch auch beispielsweise mit SPH 0x00 SPL 0xff intialisieren. Man hat somit 256 Bytes Stack im unteren RAM-Bereich. Technisch gesehen ist das machbar. Allerdings hab ich bis jetzt in keiner Beschreibung gelesen, dass das geht. Wurde das absichtlich weggelassen, weil das schlechter Stil ist, oder schlichtweg übergangen?
Hallo, gehen tuts mit Sicherheit. Nur was soll es bringen. Eine Stackgröße von 256 Byte habe ich noch nie benötigt, höchsten mal 32 Byte, sprich der Rest des RAMs war noch verfügbar (ist sowiso oftmals sehr knapp). Interessant ist vieleichtt die Frage was passiert wenn der Stack überläuft (Adresse <0)? Gruß -=jens=-
Laut dem Simulator fängt der einfach wieder bei 0xff:0xff an. Naja, man könnte auch noch bis a0 runter gehen. ich brauche auch nicht so viel stack, denke ich. war auch nur ein Beispiel..
den stack an das RAM-Ende zu legen, ist IMMER die sinnvollste Lösung, da dann der gesamte RAM ausgenutzt werden kann, ohne aufpassen zu müssen, dass sich was überschneidet. Stack von oben, eigene Variablen von unten. Kommt es zu Konflikten, würde das auch passieren, wenn der Stack woanders beginnen würde. Der Stack kann übrigens auch in den Registerbereich laufen (SP<0x20)! Wenn man genau weiss, wie tief der stack sein muss, könnte man den zwar genausogut bei 0x20+x anlegen und danach die eigenen Variablen, aber was hat man gewonnen? Nichts. Ändert man was am Programm, was Auswirkungen auf die Stacktiefe hat, müssen alle Variablen und der Beginn des stack nach oben geschoben werden. Bringt alles nichts, und deswegen wirds auch nie nirgends nicht gemacht.
Prinzipielle Zustimmung. Du hast nur die IO-Register vergessen, die liegen zwischen 0x20 und 0x60 bzw. 0x100 (je nach Controller). Ergo, bei Stacküberlauf erstmal wildes Blinkern an allen angeschlossenen LEDs...
Hallo, >bei Stacküberlauf erstmal wildes Blinkern an allen angeschlossenen LEDs... Interessante Vorstellung, ist ja vieleicht ne neue Möglichkeit die Register zu setzten ? Ich glaub ich muss mal wieder etwas "rumspielen" ;) Gruß -=jens=-
Hi, sinnvolle und notwendige Manipulation des SP findet in MultiTasking Umgebungen statt. Jeder Prozess soll da ja seine Umgebung wieder vorfinden wenn er "drankommt". Somit hat jeder Prozess seinen eigenen Stack Bereich. Gunter
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.