Hallo zuammen Ich berechene was leider bekomme ich nicht immer das gleiche Resulatet WORD intTm1; unsigned long int intTm2; unsigned long int intTm3; intTm1 = ADC; intTm2 = 73720; //x10 damit genauer gerundet wird intTm3 = intTm2/1023; intTm2 = intTm3*intTm1; intTm3 = intTm2/10; //Div 10 Damit genauer gerundet wird intTm1 = intTm3; intADCV = 65536-intTm1; //Wert für Timer1 Compare Match A Das Problem ist, wenn ich schreibe: intTm2 = 73720; dann funktioniert die Sache. Wenn ich schreibe: intTm2 = 10*7372; funktioniert die Sache nicht. Es muss irgenwie was mit den Variablen zu tun habe? Finde aber den Fehler nicht. Gruss Resi
Wenn nicht anders angegeben, dann rechnet der Compiler immer mit Int, in deinem Fall wohl mit 16Bit. Bei 10 * 7372 wird zuerst 7372 mit 10 multipliziert und dann erst nach long int gecastet. Und in einen normalen int kriegste 73720 halt beim besten Willen nicht rein. So müsste es aber gehn:
1 | intTm2 = 10 * (long int)7372 |
Danke Philipp Da hätte ich lange suche können, da wäre ich nie drauf gekommen Gruss Resi
<besserwisser>
1 | intTm2 = 10 * 7372L |
2 | //bzw.
|
3 | intTm2 = 10 * 7372l |
tuts auch </besserwisser>
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.