Stack dimensionieren

Gast #215898
Hallo,

wie dimensioniert man denn den Stack bei einem Tiny26 programmiert mit
dem IAR-Compiler?

Der Tiny26 hat 128Byte SRAM. Der Compiler teilt den Stack, wenn ich das
richtig verstand habe, auf in Sprungadressen und Arbeitsspeicher für
Variablen. Im CSTACK liegen die Variablen, im RSTACK die Sprungmarken.

Wie erfolgt nun die Gewichtung? Im Tutorial auf dieser Seite hab ich
was von empfohlenen 100 Leveln gelesen. Das ist ja mit 128 Byte nich
möglich, da ein Level ja 2 Byte verschlingt. Wie teile ich den Stack
auf? 2/3 Sprungadressen und 1/3 CSTACK oder was empfehlt ihr mir?

Gruß,
Michael
Gast
"Im CSTACK liegen die Variablen, im RSTACK die Sprungmarken."


Was macht denn das für einen Sinn ???

Bei WINAVR gibt es sowas nicht, wozu auch.

Die globalen und statischen Variablen laufen von unten und der Stack
von oben. Somit ist immer maximal Stack reserviert.


Allgemein würde ich sagen, daß 16 Byte (8 Level) für den echten Stack
ausreichen.

Was den CSTACK angeht, wie gesagt, da weiß ich nicht im geringsten,
wozu der nütze ist, lokale Variablen werden doch in Registern
angelegt.


Peter
Gast
Ganz meiner Meinung! Ich versteh den Sinn auch noch nicht. Deshalb komm
ich ja so ins straucheln.

Auszug aus dem Compiler Reference Guide:

S. 23 "... A small number of these variables" (auto und static) "are
placed in processor registers; the rest are placed on the stack..."

S.24 "... The stack is a fixed block of memory, devided into two
parts. The first part contains allocated memory used by the functions
that called the current function, and the function that called it, etc.
The second part contains free memory that can be allocated. The
borderline between the two areas is called the top of stack and is
represented by the stack pointer,[...]. Memory is allocated on the
stack by moving the stack pointer."

Ich hab am RSTACK geschraub, bis das Programm abgestürzt ist. 2 Level
reichen im Moment aus. Bei CSTACK <0x22 hängt sich der µC bei
bestimmten Konstellationen auf.
Gast
Ich verstehe das so:

0-x Bytes vom SRAM sind feste globale Variablen, der Compiler/Linker
kann also das Ende X statisch ermitteln.

127-x Bytes ist der verfügbare Stack im Gesammten. Davon
127-y Bytes sind beim Aufruf einer Funktion belegt druch den
Aufrufstack + lokalen Variablen der vorherigen Funktionen.
y-x Bytes bleiben nun übrig für die aktuelle Funktion. avon werden
wiederrum Z bytes statisch duch den Compiler für die lokalen Funktionen
alloziert. Verbleiben y-x-l Bytes die ja im Grunde frei wären. Das wäre
der CSTACK der nun zur Benutzung von speziellen Speichermanager
Funktionen zur Verfügung stehen.
Es könnte nun sein das man dem Compiler die Größe dieses CSTACKs als
minimalen Wert vorgeben kann um eben noch genügend Speicher für den
"Memory Manager" zur Verügung zu haben. Der Compiler/Linker kann nun
auf Grund dieser Information ermitteln wieviel Stack er noch für die
globalen Variablen und den Aufrufstack zur Verfügung hat. Entsprechend
diesem Wert richtet der Compiler/Linker seine Optimierung aus. Er
versucht also deinen Source so zu übersetzen das immer CSTACK Bytes für
deinen dynamsichen Speicher zur Verfügung stehen. Nun kann der Compiler
den CSTACK Bereich wie eine "globale" Variable gleich hinter dem
Bereich der globalen Variablen -> 0-X Bytes, ablegen, also festen
Speicherbereich.

Gruß Hagen

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.