Hi Forum,
ich verwende WinAvr ( WinAVR-20050214 ) und habe ein Problem mit der
Mulitplikation zweier 16Bit Variablen. Hier mein Code:

typedef unsigned int us16;
typedef unsigned long us32;

us16 a = 8192;
us16 b = 30000;
us32 c = 0;

c = a * b;

printf("a=%u\r\n", a);
printf("b=%u\r\n", b);
printf("c=%lu\r\n", c);

c = 245760000UL;

printf("c=%lu\r\n", c);

Die Ausgabe ist:
a=8192
b=30000
c=0
c=245760000

Warum ist c = 0 ? Eigentlich erwarte ich 245760000. Da c 32Bit gross ist
sollte auch kein Überlauf auftreten. Wenn ich c = 245760000UL setzte
dann wird der Wert von printf richtig ausgegeben. An der Ausgabe kann es nicht liegen.
Also warum ist c = 0 und wie bekomm ich den AVR dazu den Wert korrekt zu berechnen ?