Forum: Compiler & IDEs Flash & Sram verbrauch


von graue Theorie (Gast)


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

von Sebastian V. (sebi_s)


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.

von graue Theorie (Gast)


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?

von holger (Gast)


Lesenswert?

>Und wie geht man dann vor?

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

von Sebastian V. (sebi_s)


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.

von graue Theorie (Gast)


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

von Pandur S. (jetztnicht)


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.

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.