Hallo wie groß ist denn der Stack beim Arduino eigentlich? Sagen wir beim Mega2560.
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.
Arduino Fanboy D. schrieb: > 21.12.2018 00:19: Bearbeitet durch User Wieso kriegst du nicht mal eine einzelnen Satz hin, ohne korrigieren zu müssen? Der Stack ist also freihängend ... wo ? Teilt er sich den Adressbereich mit dem Heap? Oder wie ist die Architektur?
Axel S. schrieb: > 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. Das ist eine qualifizierte Antwort. danke :-)
Arduino Fanboy D. schrieb: > Ach, mal wieder der Roth, mit der Lesehemmung... > 21.12.2018 00:29: Bearbeitet durch User Junge du hast nicht nur ein Problem
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.
@ 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 :-)
Jean-Claude Juhnke schrieb: > Arduino Fanboy D. schrieb: >> 21.12.2018 00:19: Bearbeitet durch User > Wieso kriegst du nicht mal eine einzelnen Satz hin, ohne korrigieren zu > müssen? ...eineN einzelnen Satz hin...?
:) Ich gehe davon aus, dass das Auf und Ab inflationärer Rechtschreibung fehlende Buchstaben im Laufe der Zeit statistisch bereinnigt.
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.
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.