#define belegt 200% von Data

Gast #1373049
Lesenswert?

Hi,

hab gerade für einen attiny25 ein relativ kleines Programm geschrieben 
und bin relativ verwundert, dass der Compiler auf einmal meldet, dass 
204% des Data Platzes genutzt werden, was zuvor etwa 4% waren, nur weil 
ich folgende Zeile hinzufüge:
1
#define TCMAX (0.1*F_CPU/256/64)

Ich nutze die Konstante in der main.c um eine Zählvariable abzufragen:
1
ISR(TIMER0_OVF_vect)
2
 {
3
 if (time_count > TCMAX)
4
  {
5
  ...Porgrammcode...
6
  time_count=0;
7
  }
8
 time_count++;
9
 }

Kann mir jemand erklären wieso das so ist? Wenn ich testweise die 
Definition durch eine Zahl ersetze wird es schlagartig kleiner.
#1373086
Lesenswert?

Andreas schrieb:
> Kann mir jemand erklären wieso das so ist? Wenn ich testweise die
> Definition durch eine Zahl ersetze wird es schlagartig kleiner.

Nö.
Wird nur kleiner, weil Du den float-Ausdruck durch einen int-Ausdruck 
ersetzt.
Das ist aber in C nicht das gleiche.
Deshalb wird eine Operation (Vergleich) in float ausgeführt, wenn ein 
Operand float ist.

Willst Du das int-Ergebnis des Ausdrucks, mußt Du das auch so 
hinschreiben:
1
#define TCMAX (uint16_t)(0.1*F_CPU/256/64)


Außerdem nimmst Du nicht die optimierte float Lib "-lm".


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren