mikrocontroller.net

Forum: Compiler & IDEs Flash & Sram verbrauch


Autor: graue Theorie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Abend,
habe eine Frage die mir am Herzen liegt.
Wie viel vom Flash und vom SRAM darf man bei einem Atmel verbrauchen der 
mit C programmiert wird?
Ich habe zB hier einen AT90Can128 und habe
"Program Memory Usage   :  36794 bytes   28,1 % Full
Data Memory Usage  :  2700 bytes   65,9 % Full"
verbraucht. Ist das im Rahmen des Vernünftigen?
Gibt es eine Faustregel?
Lg

Autor: Sebastian V. O. (sebi_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den Flash kannst du komplett voll machen wenn du keine Erweiterungen an 
deinem Programm mehr vornehmen möchtest. Bei dem SRAM ist es schwieriger 
weil die Ausgabe nur globale Variablen enthält. Dazu kommt dann noch der 
Stack und eventuell sogar dynamisch reservierter Speicher. Die benötigte 
Größe vom Stack hängt vom Programm ab und wie viele großen lokale 
Variablen du hast oder ob es irgendwo rekursive Funktionsaufrufe gibt. 
Wenn dem Stack der Speicher ausgeht hast du einen Stack Overflow und es 
kann alles mögliche passieren.

Autor: graue Theorie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian V. schrieb:
> Den Flash kannst du komplett voll machen wenn du keine
> Erweiterungen an
> deinem Programm mehr vornehmen möchtest. Bei dem SRAM ist es schwieriger
> weil die Ausgabe nur globale Variablen enthält. Dazu kommt dann noch der
> Stack und eventuell sogar dynamisch reservierter Speicher. Die benötigte
> Größe vom Stack hängt vom Programm ab und wie viele großen lokale
> Variablen du hast oder ob es irgendwo rekursive Funktionsaufrufe gibt.
> Wenn dem Stack der Speicher ausgeht hast du einen Stack Overflow und es
> kann alles mögliche passieren.

Und wie geht man dann vor?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Und wie geht man dann vor?

Man nimmt einen größeren Controller mit mehr RAM.

Autor: Sebastian V. O. (sebi_s)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
graue Theorie schrieb:
> Und wie geht man dann vor?

Ich nehme mal an du meinst eine genauere Abschätzung vom SRAM Verbrauch. 
Da kann man z.B. mal die -fstack-usage Option von GCC nutzen, um den 
Stack Verbrauch pro Funktion raus zu kriegen. Dann müsste man genau 
genommen den gesamten Call Tree aufbauen, um den gesamt Verbrauch 
aufzusummieren. Leider scheitert sowas bei rekursiven Funktionsaufrufen 
und ein kompletter Call Tree ist bei Verwendung von Function Pointern 
auch nicht unbedingt möglich. Trotzdem können einem die Werte pro 
Funktion schon eine grobe Übersicht geben und Funktionen mit viel Stack 
Verbrauch aufdecken.

graue Theorie schrieb:
> Ich habe zB hier einen AT90Can128 und habe
> "Program Memory Usage   :  36794 bytes   28,1 % Full
> Data Memory Usage  :  2700 bytes   65,9 % Full"
> verbraucht. Ist das im Rahmen des Vernünftigen?

Ohne jetzt deine Code zu kennen sieht der SRAM Verbrauch schon in 
Ordnung aus. Bleiben noch etwa 1300 Bytes für den Stack (vielleicht 
sogar mehr, je nach Linkerscript sind in den 2700 schon einige 100 Bytes 
für Stack mitgerechnet). Wenn du dir nich irgendwo ein riesiges lokales 
Array reingebaut hast sollten die 1300 Bytes Stack schon für einiges 
reichen.

Autor: graue Theorie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian V. schrieb:
> Ich nehme mal an du meinst eine genauere Abschätzung vom SRAM Verbrauch.

Ja Genau das meinte ich.

Sebastian V. schrieb:
> mal die -fstack-usage
Wo muss ich das ausführen im Atmel Studio?

Sebastian V. schrieb:
> Wenn du dir nich irgendwo ein riesiges lokales
> Array reingebaut hast

Wie groß wäre so ein großes Array in der Theorie? schon mit 100Byte oder 
größer?
Danke Für die gute Erklärung

Autor: Sabberlott W. (jetztnicht)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Wie groß wäre so ein großes Array in der Theorie? schon mit 100Byte oder
größer?

Ein Array kann irgend eine Groesse haben... irgendwie fehlt da noch 
einiges.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.