Hallo, zeigt das AVR Studio nur den RAM Speicher vom main file an, oder praktisch den worstcase mit allen dazugehörigen source-files? Kann ich das RAM komplett mit Variablen füllen, oder braucht der mc noch Platz zum arbeiten. Eigentlich schon, oder? Wieviel % sollte man unbenutzt lassen? Ich habe Variablen deklariert. Speicher 45% verbraucht (Atmega16). System inkl. paralleles LCD funktioniert. Wenn ich nun z.B. ein uint64_t[64] array hinzufüge, funktioniert nichts mehr. Bei einem array mit 100 werten funktioniert es erstaunlicherweise wieder. Ich habe keine Ahnung was das für ein Phänomen ist? Bitte um Rat!! Danke im Voraus!! Stephan
Servus! Ich kenne mich mit AVR Studio nicht aus, schätze aber mal, das es dir den gesamten Speicherverbrauch anzeigt. Alles andere wäre mehr oder weniger sinnlos. Du könntest das RAM komplett mit Variablen füllen, wenn du keinen Stack brauchst. Sobald du aber in C programmierst, brauchst du den Stack. Wieviel RAM du dem Stack lassen solltest, ist schwer zu sagen. Kommt drauf an. Rekursiv aufgerufene Funktionen (z.B. naive Implementierung von Fakultät oder so) können unter Umständen dann extrem viel Speicher für den Stack brauchen. Das mit deinem uint64 Array muss ein Fehler sein. Rechne mal: ein uint64 hat 8 Byte, du nimmtst 64 davon, macht 512 Byte oder genau die Hälfte vom RAM des Mega16. Wenn du 45% Speicherbelegung hast, würde ja das uint64_t[64] Array theoretisch noch reinpassen. Du schreibst aber, das es Fehler gibt ->Stack vermute ich mal. Aber ein uint64[100]==800Byte==80% des RAMs KANN nicht mehr reinpassen. Zeig halt mal deinen Code her, da wird der eine oder andere schon was sinnvolles zu sagen können!
Da wird angezeigt, wie viel RAM von globalen und 'static' Variablen gebraucht wird (.data und .bss). Wie viel RAM noch für Stack (-> Rückkehradressen für Funktionen und ISRs) und Heap ( RAM für lokale Variablen in Funktionen, die nicht in Registern gehalten werden (können) und malloc()) verbraucht wird, KANN der compiler nicht anzeigen. (Spätestens) Wenn der RAM knapp wird: - Optimierung aktivieren (Die sollte man nur _aus_schalten, wenn man Assembler lernen oder Compiler-Bugs finden will, oder wenn man nicht sicher ist, dass das Programm überhaupt funktioniert ;) ) - konstanten (v.a. Strings) in den Flash auslagern - alle Variablen auf die minimal nötige Größe beschränken hth. Jörg
Ja, die lokalen werden auf den Stack gelegt. Diesen kann man sich übrigens anzeigen und auch eine Meldung ausgeben lassen, wenn dieser zu voll ist und vergrößert werden muss. http://www.iar.com/index.php?show=219928_ENG&&page_anchor=http://www.iar.com/p219928/p219928_eng.php mfg
@ozo: Ja, stimmt da hast du recht mit dem verbrauchten speicher. Ich habe die Variablen deklariert und mich immer auf die RAM Anzeige vom AVR Studio verlassen. Aber abgesehen davon tritt das gleiche Phänomen bei einem Mega32 auf, der 2 KByte RAM besitzt. @jörg: Welche Funktion brauche ich, wenn ich z.B. const uint8_t test[3][16] = {"...","......}; in den Flash auslagern und lesen möchte. Vielleicht: const uint8_t test[3][16] PROGMEM = {"Test","......}; Aber wie kann ich darauf zugreifen? Für das oben beschriebene Phänomen hat keiner ne Idee? Gruß Stephan
Schaust du mal hier: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29 und das Manual zur avrlibc (in deinem AVR-GCC Ordner) > Für das oben beschriebene Phänomen hat... Welches? hth. Jörg
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.