www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Allgemeines zum Stack


Autor: TecDroiD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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=-

Autor: TecDroiD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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..

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Joerg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: DerInder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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=-

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Joerg: haste natürlich recht.

Autor: Gunter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.