Wenn in einem Programm die unten stehende Zeile[1] steht, ist der vom Compiler (GCC / WinAVR) übersetzte Zielcode 1338 Bytes groß. Wird der Ausdruck von Hand errechnet und eingetragen[2], dann ist der Zielcode 538 Bytes groß. Der Compiler ermittelt doch in der Regel Konstanten zur Zeit des Compilierens - oder nicht? Muss ich einen Schalter angeben, damit er dies tut? [1] T = (Ut - (4095.0/5.0)*(1.162-12.3*0.0079)) * 154 ; [2] T = (Ut - 872) * 154 ;
Du musst das innere Produkt nach int casten, sonst wird
1 | T = (Ut - 872.09577) * 154; |
gerechnet. Also so:
1 | T = (Ut - (int)((4095.0/5.0)*(1.162-12.3*0.0079))) * 154; |
bzw. so (um Rundungsfehler zu minimieren):
1 | T = (Ut - (int)((4095.0/5.0)*(1.162-12.3*0.0079)+0.5)) * 154; |
> Du musst das innere Produkt nach int casten ...
Die Einführung von (int) ändert nichts an der länge des Zielcodes.
Das Problem ist, dass der GCC-Compiler konstante Ausdrücke nicht zur
Zeit der Übersetzung berechnet.
Du hast recht :) Die Klammer um den Ausdruck fehlte.
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.