www.mikrocontroller.net

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


Autor: Stephan S. (tantal)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lokale Variablen liegen auch auf dem Stack, oder?

Autor: Matze (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

mfg

Autor: Stephan S. (tantal)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaust du mal hier:
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
und das Manual zur avrlibc (in deinem AVR-GCC Ordner)
> Für das oben beschriebene Phänomen hat...
Welches?

hth. Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.