Flash & Sram verbrauch

Gast #5163376
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
#5163399
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.
Gast #5163414
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?
#5163529
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.
Gast #5163765
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren