mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 - Stack & Heap im Projekt


Autor: Tony _s (tony_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Wie definiert man die Grösse von Stack und Heap genau?
Ich habe immer eine Warnung das der Stack zu 100% voll ist.

Wäre für einen Ratschlag dankbar.

Thanks und Gruss
Tony_S

Autor: Rainer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tony_S!

Auf diese Frage habe ich auch lange eine Antwort gesucht.
Bin jetzt mal zu folgendem Schluss gekommen:

Das RAM beinhaltet den Datenspeicher, den Stack und den Heap.

Datenspeicher:
Im Datenspeicher werden die zur Kompilierzeit bereits bekannten
Variablen angelegt; und haben ihren festen Platz. Sie stehen also
vorher schon fest.

Stack:
Der Stack beinhaltet Rücksprungadressen und Übergabeparameter von
Funktionen.

Heap:
Wird während des laufenden Programms zusätzlich neuer Speicher benötigt, 
wird dieser vom Heap bereitgestellt. Heapgröße muss daher glaub ich 
vorher angegeben werden (Compilereinstellung?).

Stack und Heap teilen sich dabei den Speicherbereich.
Der Stack stapelt sich von der einen Seite; und der Heap von der anderen 
Seite. Wird der Stack immer tiefer; und der Heap immer größer kann sich 
der Speicherbereich der beiden überlappen.
Die Folge wäre dann wohl ein Programmabsturz.

Wie gesagt; dieses Ergebnis habe ich mir zusammengereimt.
Aber vielleicht kann dazu noch ein "alter Hase" besseres hinzufügen oder 
auch gänzlich korrigieren.
Wäre auch für jede Information dankbar.

Viele Grüße und viel Spaß beim Programmieren!

Rainer

Autor: Philipp Burch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn der Stack voll ist, dann ist der nicht unbedingt zu klein, sondern 
dein Programm packt zuviel darauf. Du solltest bedenken, dass alle 
lokalen Variablen, sowie Argumente für Funktionen auf dem Stapel 
abgelegt werden. Arrays so zu übergeben ist daher keine gute Idee, dazu 
gibt's Zeiger.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So viel ich weiss kann man die Grösse des Stacks nicht definieren. Wie 
bereits geschrieben wurde, wächst der Stack von der anderen Seite her 
als die Variabeln sind. Von da her ist es auch nicht nötig, den Stack zu 
definieren. Allerdings macht das Programm einfach mist oder stürtzt ab, 
wenn der Stack die Variabeln überschreibt.

Die anderen Speicherbereiche werden beim GCC im Linker Script definiert. 
Für den MSP430F169 heisst das Linkerscript z.B. so: msp430x169.x

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.