mikrocontroller.net

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


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define TCMAX (0.1*F_CPU/256/64)

Ich nutze die Konstante in der main.c um eine Zählvariable abzufragen:
ISR(TIMER0_OVF_vect)
 {
 if (time_count > TCMAX)
  {
  ...Porgrammcode...
  time_count=0;
  }
 time_count++;
 }

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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was kommt raus, wenn du
#define TCMAX ((F_CPU/10)/256/64)
verwendest?

Ralf

Autor: Andreas (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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:

#define TCMAX (uint16_t)(0.1*F_CPU/256/64)


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


Peter

Autor: Andreas (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.