#define belegt 200% von Data

Gast #1373049
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.
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.