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
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.
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?
>Und wie geht man dann vor?
Man nimmt einen größeren Controller mit mehr RAM.
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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.