Hallo zusmmanen,
ich hab folgenden Code:
1 | WRT0 = Ubat_errechnen(232, 3300);
|
2 | ....
|
3 |
|
4 | int Ubat_errechnen (int wert, int ref)
|
5 | {
|
6 | uint16_t result = 0; //max. Wert 3300 (Wert 256 x 3300 Ref. / 256)
|
7 | result = wert * ref / 256; //erst Multiplikation um Rundungsfehler zu minimieren
|
8 |
|
9 | return result;
|
10 | }
|
In der Simulation im AVR-Studio erwarte ich jetzt eigentlich als
Rückgabewert "2990", doch in der Varible result steht "65455". Warum ?
Könnte es sein, dass der µC (Atmega8) mit den Zwischenergebnis "765.600"
(bevor er mit 256 diviert) ist klar kommt, da dieser größer als 16 Bits
ist ? Auch wenn ich die Variable "result" mit uint32_t deklariere, kommt
nur Mist raus. Was mache ich falsch ?