Die Ausgabe funktioniert jetzt, aber die anfängliche Berechnung ist immer noch falsch
Die sieht so aus:
mfgCode:#define TICK 32 uint32_t myVar = 0; ISR(...) { myVar = TCNT1; TCNT1 = 0; myVar *= TICK; ... }
Die Ausgabe funktioniert jetzt, aber die anfängliche Berechnung ist immer noch falsch
Die sieht so aus:
mfgCode:#define TICK 32 uint32_t myVar = 0; ISR(...) { myVar = TCNT1; TCNT1 = 0; myVar *= TICK; ... }
hi,
evtl.: myVar*=(uint32_t)TICK;
mfg
Achim
Was passiert? Das myVar 32-Bit breit ist, muss die Multiplikation auch mit 32-Bit erfolgen. Das sollte so eigentlich stimmen ...
Du könntest Mal probieren, "#define TICK 32UL" zu schreiben (das hat die gleiche Wirkung wie der Vorschlag von Achim), ggf. bekommst du Probleme wegen unsigned*signed, aber ich bezweifle das.
Grüße,
Markus
Tiny ASURO Library: Thread und sf.net Seite
Einige von Atmel verbreitete Distributionen von avr-gcc enthalten fehlerhafte 32 = 16*16 routinen, siehe z.B.
http://gcc.gnu.org/PR52474
Disclaimer: none. Sue me.
Lesezeichen