Forum: Mikrocontroller und Digitale Elektronik Speicherbelegung, Verbrauch µC, wer kann helfen ?


von Benjamin (Gast)


Angehängte Dateien:

Lesenswert?

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

von Benjamin (Gast)


Lesenswert?

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 ?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Benjamin (Gast)


Lesenswert?

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?

von Falk B. (falk)


Lesenswert?

@ 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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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

von Raterunde (Gast)


Lesenswert?

> Welches der beiden Speicher ist wichtiger ?

Was ist wichtiger, Reifen oder Felge?

von Route_66 H. (route_66)


Lesenswert?

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.

von Christian K. (the_kirsch)


Lesenswert?

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.

von Fritz G. (fritzg)


Lesenswert?

Die lokalen Variablen nicht vergessen, die liegen auch auf dem Stack.

von Christian K. (the_kirsch)


Lesenswert?

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
Noch kein Account? Hier anmelden.