Forum: Mikrocontroller und Digitale Elektronik #define belegt 200% von Data


von Andreas (Gast)


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.

von Ralf (Gast)


Lesenswert?

Was kommt raus, wenn du
1
#define TCMAX ((F_CPU/10)/256/64)
verwendest?

Ralf

von Andreas (Gast)


Lesenswert?

ja, dann ist die Größe auf einmal wieder wie vorher. Danke!
Gibts dafür einen besonderen Grund?

von Peter D. (peda)


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

von Andreas (Gast)


Lesenswert?

okay, danke für die Antworten!
Ich denke das ist damit ausreichend geklärt.

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.