Forum: Mikrocontroller und Digitale Elektronik AVR Studio RAM-Anzeige, internes RAM Problem


von Stephan S. (tantal)


Lesenswert?

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

von ozo (Gast)


Lesenswert?

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!

von Jörg X. (Gast)


Lesenswert?

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

von ozo (Gast)


Lesenswert?

lokale Variablen liegen auch auf dem Stack, oder?

von Matze (Gast)


Lesenswert?

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

von Stephan S. (tantal)


Lesenswert?

@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

von Jörg X. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.