PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : division durch null



manhunt
08.02.2009, 16:47
Hallo

Ich habe das Problem das mir der Compiler division durch null als Warning meldet.
test.c:19: warning: division by zero

Also die Datei test.c wird mittels : "avr-gcc -c test.c -mmcu=atmega168 -DF_CPU=1000000UL" compiliert (avr-gcc 4.3.2..), nun gibt es hier ein define das ICR heißt und in der verschiedene Defines zu einem neuen Define zusamme gefügt werden.

Nun in jeder zeile in der ich nun ICR einsetze erhalte ich ein Warning division durch null....

Wenn ich jedoch zuerst den Precompiler mit "-E" drüberlaufen lasse und dann erst -c mache geht es...


Könnte mal jemand von euch versuchen das zu Compilieren bzw hat jemand ne Erklärung....



Datei ist im Anhang.

edit:
Keine Ahnung warum aber es wurde 3mal angehängt...

uwegw
08.02.2009, 19:32
Das könnte damit zusammenhängen, dass der Präprozessor hier anscheinend mit int rechnet.
1/(F_CPU/PRESCALE) ergibt dann 0,000008, was als int auf Null abgeschnitten wird. Dasselbe passiert nochmal bei (PERIOD/1000) = 0,02, was auch zu Null wird. Letztendlich wird also 0 durch 0 geteilt...

Edit: ist 1250 das, was deiner Meinung nach rauskommen sollte? Das passiert bei
#define ICR (int) (((PERIOD/(float)1000)/(1/(F_CPU/(float)PRESCALE)))/2)

PS: so ein kurzes Stück Code sollte man besser in
[/code ]-Tags packen statt in den Anhang. Dann sieht jeder sofort, was drinsteht.

PPS: und so wird es auch noch einigermaßen lesbar:
[code]
#define ICR (int) ( \
( \
(PERIOD/(float)1000) \
/ \
( \
1 \
/ \
(F_CPU/(float)PRESCALE) \
) \
) \
/ \
2 \
)

manhunt
08.02.2009, 20:24
Danke sehr, daran habe ich gar nicht gedacht...

Ja, sollte stimmen bei 8000000hz, sinds dann 10000;

lg manhunt