Hallo Leute, nachdem ich mein Programm fertig auf meinen µC geflasht habe, steht der Speicherverbrauch da bzw. wird mir angezeigt (siehe Bild). Was heißen die zwei Angaben ? Bin relativ neu, daher entschuldigt, wenn das eine dumme Frage ist. Jedoch denke ich, kann man mir hier helfen. Zu meinen Speichern des Arduino-Board kann ich folgendes sagen: Flash Memory 256 KB of which 8 KB used by bootloader SRAM 8 KB EEPROM 4 KB
Benjamin schrieb: > Hallo Leute, > nachdem ich mein Programm fertig auf meinen µC geflasht habe, steht der > Speicherverbrauch da bzw. wird mir angezeigt (siehe Bild). > > Was heißen die zwei Angaben ? Bin relativ neu, daher entschuldigt, wenn > das eine dumme Frage ist. Jedoch denke ich, kann man mir hier helfen. > > Zu meinen Speichern des Arduino-Board kann ich folgendes sagen: > > Flash Memory 256 KB of which 8 KB used by bootloader > SRAM 8 KB > EEPROM 4 KB Einmal ist ja das Data und einmal das Programm angegeben, was ist wichtiger von beiden ?
Wenn 6666 Bytes 2.5% sind ... wieviele Bytes sind dann 100%? Und wenn 773 Bytes 9.4% sind ... wieviele Bytes sind dann 100%? Damit solltest Du selbst herausfinden können, welcher Speicher womit gemeint ist.
Rufus Τ. Firefly schrieb: > Wenn 6666 Bytes 2.5% sind ... wieviele Bytes sind dann 100%? der Flash-Speicher ? Rufus Τ. Firefly schrieb: > Und wenn 773 Bytes 9.4% sind ... wieviele Bytes sind dann 100%? SRam ? Frage dbzgl.: Welches der beiden Speicher ist wichtiger ? Und wenn ich eine Zustandsreglung aufbauen möchte, was ist da wichtiger ? Sram oder Flash?
@ Benjamin (Gast) >> Wenn 6666 Bytes 2.5% sind ... wieviele Bytes sind dann 100%? >der Flash-Speicher ? Jo. >> Und wenn 773 Bytes 9.4% sind ... wieviele Bytes sind dann 100%? >SRam ? Jo die 2. >Frage dbzgl.: Welches der beiden Speicher ist wichtiger ? Wenn einer von beiden >100% ausgelastet ist, hast du ein Problem. Meistens hat man eher Probleme mit dem SRAM als dem Flash. Siehe Speicher. >Und wenn ich eine Zustandsreglung aufbauen möchte, was ist da wichtiger >? Sram oder Flash? Kann man so allgemein nicht sagen. Eine Statemachine braucht eher mehr Flash als SRAM.
Na, die beiden Speichertypen hast Du ja schon mal zuordnen können. Deine Frage allerdings ... Also: Im Flash wird Dein Programm abgelegt, und konstante (d.h. unveränderliche) Daten, wie Texte etc. Im RAM werden Daten abgelegt, die sich während der Laufzeit Deines Programmes ändern können, d.h. unter anderem Deine Variablen, und --sehr wichtig-- der Stack. Man kann nicht festlegen, was "wichtiger" ist -- beides ist wichtig, aber das RAM ist deutlich knapper bemessen. Hier gibt es eine Besonderheit der AVR-Architektur zu berücksichtigen; wenn Du mit Stringkonstanten arbeitest, landen diese nicht nur im Flash, sondern belegen zusätzlich noch RAM -- das ist etwas, was man nur mit Klimmzügen umgehen kann. Siehe hierzu: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Flash_mit_PROGMEM_und_pgm_read und http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Flash_mit_flash_und_Embedded-C
> Welches der beiden Speicher ist wichtiger ?
Was ist wichtiger, Reifen oder Felge?
Rufus Τ. Firefly schrieb: > Hier gibt es eine Besonderheit der AVR-Architektur zu berücksichtigen; > wenn Du mit Stringkonstanten arbeitest, landen diese nicht nur im Flash, > sondern belegen zusätzlich noch RAM -- das ist etwas, was man nur mit > Klimmzügen umgehen kann. Das ist keine Besonderheit der AVR, sondern eine Besonderheit der gewählten Programmiersprache/Compiler. Das kann man ohne Klimmzüge mit der richtigen Programmierumgebung beheben.
Der Compiler zeigt dir an wie viel Flashspeicher das eigentliche Programm belegt. Und wie viel Ram durch Variablen und Konstanten beim Start des Programms bereits belegt werden. Den weiteren RAM verbrauch während der Ausführung deines Programms kennt der Compiler natürlich nicht. Der wird durch den Stack verbraucht, der wächst mit jedem Funktionsaufruf (und schrumpf mit dem beenden einer Funktion) Und den Heap, der wird durch 'new', malloc(), etc. verbraucht. Der Stack wächst von oben, und der Heap von unten, das dazwischen ist dein freier RAM. Sobald Stack und Heap sich überschreiben stürzt dein Programm ab. Da man dynamischen Speicher, also 'new', malloc() usw. auf einem µC meistens nicht verwendet, muss man nur auf den Stack achten der eigentlich nur durch unkontrollierte rekursive Funktionsaufrufe zu groß wird.
Die lokalen Variablen nicht vergessen, die liegen auch auf dem Stack.
Beim Aufruf einer Funktion werden folgende Daten auf dem Stack gespeichert: die Rücksprungadresse die übergeben Variablen eventuelle Register die gebackupt werden die lokalen Variablen der Funktion Alles wird beim verlassen der Funktion wieder freigegeben.
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.
