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

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