Arduino Stackgröße

#5666435
Lesenswert?

Jean-Claude Juhnke schrieb:
> Hallo wie groß ist denn der Stack beim Arduino eigentlich? Sagen wir
> beim Mega2560.

Der C-Startupcode intitialisiert den Stackpointer auf das Ende des RAMs. 
Globale Variablen werden vom Anfang des RAMs her angelegt. Der Platz 
dazwischen ist nutzbar für den Stack.

Der Linker warnt dich nur dann, wenn das Ende der Speicher-Sektion mit 
den statischen Variablen (.data + .bss + .noinit) größer ist, als der 
RAM insgesamt. Im Zweifelsfall ist die Kacke schon lange vorher am 
Dampfen.

Eine zuverlässige Analyse des größten jemals benutzten Stackbereichs ist 
nur in Ausnahmefällen möglich. Ich kenne kein Tool, das das leistet.
#5666463
Lesenswert?

Jean-Claude Juhnke schrieb:
> Der Stack ist also freihängend ... wo ? Teilt er sich den Adressbereich
> mit dem Heap? Oder wie ist die Architektur?
Der Stack von unten nach oben und der Heap von oben nach unten.
Dadurch muss man keine feste Grenze festlegen wodurch Speicher ungenutzt 
bliebe sobald eine der beiden Datenmengen, ihr limit erreicht.

Axel S. schrieb:
> Eine zuverlässige Analyse des größten jemals benutzten Stackbereichs ist
> nur in Ausnahmefällen möglich. Ich kenne kein Tool, das das leistet.
Das dürfte wohl aus dem Selben grund scheitern wieso man nicht 
automatisch feststellen kann, ob ein beliebiges Programm jemals enden 
wird, oder nicht.
Gast #5666470
Lesenswert?

@ Alex G.

Das ist sinnvoll und ich habe kaum ein anderes Konzept gesehen. Warum 
auch.

(Fast) nur Microsoft bringt Ausnahmen zustande. Im DOS war nicht nur der 
Stack limitiert, nein, er wurde beim Aufruf von INT Anweisungen sogar 
"initialisiert". d.h. der Stackpointer wurde neu geschrieben. Nur ein 
kleiner Ausflug in die vergangene TSR-Welt. Aber seitdem (man muss es 
wirklich erlebt haben, um es zu glauben) frage ich halt nach dem 
Speicherkonzept.

Schönen "Abend" noch :-)
#5666784
Lesenswert?

Alex G. schrieb:
> Jean-Claude Juhnke schrieb:
>> Der Stack ist also freihängend ... wo ? Teilt er sich den Adressbereich
>> mit dem Heap? Oder wie ist die Architektur?

> Der Stack von unten nach oben und der Heap von oben nach unten.

Bzw. anders herum. Beim AVR "wächst" der Stack in Richtung niedrigere 
Adressen. Beim Cortex-M dito. Bei anderen Architekturen kann das anders 
aussehen oder man kann es sogar konfigurieren.

Das ist aber ein vergleichsweise unwichtiges Detail. Entscheidend ist, 
daß der nicht für das Datensegment verwendete, restliche RAM von einem 
Ende her für den Stack und vom anderen Ende her für den Heap verwendet 
wird.

> Dadurch muss man keine feste Grenze festlegen wodurch Speicher ungenutzt
> bliebe sobald eine der beiden Datenmengen, ihr limit erreicht.

Ganz recht. Allerdings wäre es schön, wenn Stackoperationen einerseits 
und malloc()/new() andererseits darauf aufpassen könnten, ob sie die 
aktuelle Grenze ihres Gegenspielers übertreten. Wieviel Nutzen sich auf 
einem µC daraus ziehen läßt, ist natürlich begrenzt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren