Speicherbelegung, Verbrauch µC, wer kann helfen ?

Gast #4069975
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
Angehängte Dateien:
Gast #4069977
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 ?
#4069990
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.
Persönliche Seite #4069996
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
#4072718
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.
#4072740
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.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.