Compiler behauptet 0 Bytes RAM

Gast #2113716
Lesenswert?
• ▲
▼
Hi

Warum behauptet der Compiler, dass bei folgendem Code 0 Bytes RAM 
verbraucht werden? (UART und ADC wurden vorher mit ein paar Zeilen Code 
initialisiert)
1
unsigned short i;
2
unsigned char messwerte[2000];
3
for(i=0;i<2000;i++)
4
{
5
  loop_until_bit_is_set(ADCSRA, ADIF);
6
  messwerte[i]=ADCH;
7
}
8
for(i=0;i<2000;i++)
9
{
10
  while (!(UCSRA & (1<<UDRE)));
11
  UDR = messwerte[i];
12
}

Mache ich daraus eine globale Variable:
1
unsigned char messwerte[2000];
sagt der Compiler mir korrekterweise, dass mein RAM des ATmega32 zu 
97,7% gefüllt ist. Interessanterweise braucht der Durchlauf dieser 
Schleife:
1
for(i=0;i<2000;i++)
2
{
3
  loop_until_bit_is_set(ADCSRA, ADIF);
4
  messwerte[i]=ADCH;
5
}
7 Takte wenn die Variable lokal ist und 8 Takte wenn sie global ist...
Das ergibt für mich keinen Sinn, aber verwirrender finde ich halt, dass 
bei Verwendung der lokalen Variablen der dafür verbrauchte Speicher 
nicht mehr angezeigt wird. Weiß jemand woran das liegt?

Gruß Tobias
#2113812
Lesenswert?
• ▲
▼
Tobias schrieb:

> sagt der Compiler mir korrekterweise, dass mein RAM des ATmega32 zu
> 97,7% gefüllt ist. Interessanterweise braucht der Durchlauf dieser

Globale und statische Daten werden vom Compiler angelegt und daher 
angezeigt. Lokale Daten werden erst zur Laufzeit vom Code auf dem Stack 
angelegt und werden daher vom Compiler nicht angezeigt. Platz brauchen 
sie trotzdem.

2000 Bytes Daten bei 2048 Bytes RAM sind eine Garantie für Probleme, 
weil zu wenig Platz für den übrigen Stack vorhanden ist.

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.