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