Hallo Alle Zusammen Beim Notepad werden mit dem GNU CC doch immer am Ende die Zahlen für den belegten Speicher erstllt. Was bedeuten diese Zahlen und was ist zum Beispiel die Grenze für meinen Mega 32? Ich habe in einem Programm nähmlich sehr große locale Arrays angelegt. Wenn ich sie verkleiner läuft er nach dem programmieren super an. Sind sie aber in ihrer benötigten Größe, dann ist schluss. Der MC stürtzt einfach ab. Bei globalen Arrays weiß ich schon, dass sie im bss abgelegt werden und da liegt die Grenze bei der Größe des vorhandenen RAM's oder?!? Wo werden denn nun die Localen Arrays abgelegt? Wie kriege ich die unter, ohne den MC abzuschmieren?? Klärt nen Dummen doch mal bitte auf :-). MfG Marco
Also lokale arrays werden auch im Ram abgelegt, allerdings meines wissens nur so lange, wie die entsprechnende Funktion abgearbeitet wird. Meines wissens müssten sich zwei lokale arrays, die in verschiendenen Funktionen sitzen sich den Speicherplatz "teilen" können, solange sie nich die Eine in der Anderen aufgerufen wird o.ä. Korrigiert mich bitte, wenn ich falsch liegen sollte. Wenn ein Array also größer ist, als der Ram (abzüglich Stack und anderer Variablen) muss entweder das Array kleiner werden oder du brauchst mehr RAM...
oaky, also stürtzt mein Atmel also ab, weil die Arrays zu groß sind. Das blöde ist ja, dass beim kompilieren nur globale Variablen größenmäßig sofort erfaßt werden. Bekomme ich irgendwie raus, wann ich den RAM ausreize? Marco
Kenne mich zwar nicht mit C mit AVRs aus, aber werden lokale Variablen und Arrays nicht auf dem Stack abgelegt? Du müsstest dir also anschauen, was die maximale Schachtelung der Funktionsaufrufe bei dir ist und wie viele lokale Variablen und Arrays jeweils benutzt werden. Das ganze aufaddieren, kräftig schütteln und schauen, ob du mit dem Stack nicht vielleicht doch schon in den Bereich von globalen Variablen rutschst (oft auch "Heap" genannt) oder gar den ganzen SRAM zustapelst.
Hallo zusammen, generell werden Array im Stack abgelegt, es sei denn man erzeugt sie mit malloc() / new() in C++. Dann wird ein Zeiger im Stack belegt und die Daten wandern in den Heap. Der Vorteil dabei ist der, der Heap kann beliebig groß sein, sollange das OS da mitspielt, der Stack hingegen ist generell eher bescheiden mit IMHO max. 640kB. Wie genau das jetzt im Atmel aussieht, ob der AVR-gcc überhaupt zwischen Stack und Heap unterscheidet weiß ich nicht, da es IMHO in der Havard Architektur einige Tricks gibt, wie man dem ganzen Speicherblock und dem Programmblock besonders geschickt aufteilt und die Probkleme, die die von Neumann Architektur hat etwas umschifft. Ich würde Dir empfehlen, große Arrays entweder in das EPROm oder das Flash zu verbannen. An letzteren Problem sitze ich derzeit selber. Gruß Marcus
Hallo wieder alle zusammen :-) Was ist denn die Größe des Stacks? Wenn ich einen Mega32 habe, der ja feste Speichergrößen besitzt, kann ich dann zum Beispiel die Größe des Ram als Stäckgröße annehmen..oder wie komme ich auf den Platz für Arrays? Irgendwie muß ich dass doch auch sehen können? Gibt es die Möglichkeit unter AVR-Studio das Programm durchrattern zu lassen und zu sehen, ob es klappt und wenn nicht, warum nicht? Ich würde mich dann sogar dafür begeistern, mich mal in dieses Programm einzuarbeiten :-) . Und noch ne Frege nebenbei.. was macht man eigentlich mit diesem Programm AVR-Inside? Ich habe versucht mal irgend eine Datei damit zu öffne... aber nix oder nur sehr wehnig passierte. MfG Marco
Wenn du keine globalen Variablen verwendest, kannst du die RAM Größe als maximale Stackgröße annehmen. :-) Wieviel Speicher der Stack nun verbraucht kommt darauf an, welche Stelle deines Programms gerade abgearbeitet wird. Wenn du dein Programm im AVR Studio simulierst kannst du die aktuelle Stack Größe ablesen. Über sonstige Tricks die Stackgröße und Überschneiden des Stacks mit anderen Variablen festzustellen wurde hier im Forum schon mehrfach geschrieben.
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.