Formel bläht Code auf

Gast #2171578
Lesenswert?
• ▲
▼
Moin,

ich habe folgende Formel:
1
#define F_CPU 16000000LU              //CPU Takt
2
#define faktor (F_CPU/(256*1024*10))

Wenn ich von hand rechne kommt da 6.1xxxx heraus. Wenn ich allerdings 
nun faktor benutze wird der Code gleich gewaltig größer. Ist ja klar, 
der setzt da eine Kommazahl rein. Wenn ich allerdings ein (char) oder 
(uint8_r) davor setze, ist der erzeugte Code immernoch rund 100Byte 
größer als wenn ich manuell eine 6 eintrage.

Wo ist das Problem?

z.b.
1
PORTA = faktor; // 100byte mehr als
2
PORTA = 6; //dieses

mfg
Moderator Persönliche Seite #2171642
Lesenswert?
• ▲
▼
Nils schrieb:
1
> #define F_CPU 16000000LU              //CPU Takt
2
> #define faktor (F_CPU/(256*1024*10))

Ich bekomme hier folgende Warnings:

../test.c:14: warning: integer overflow in expression
../test.c:14: warning: division by zero

Das ist auch logisch: 256*1024*10 sind größer als ein 16Bit-Integer 
packen kann. Der avr-gcc dividiert hier jedenfalls durch 0.

Korrigiere das zu:
1
#define faktor (uint8_t) (F_CPU/(256UL*1024*10))

Dann sollte es passen. Bei mir ist jedenfalls der Code gleich groß, egal 
ob ich obigen Ausdruck verwende oder direkt den Wert 6 zuweise.

Gruß,

Frank

Antwort schreiben

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.

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.