Hallo zusammen! Ich versuche gerade die folgende Gleichung auf einem H8/300H Controller von Renesas zu implementieren: x = 1/sqrt(3) * (y + 2*z) Als Compiler verwende ich den von IAR. Soweit ist auch alles klar wie ich das ganze Umsetzen muss und es funktioniert auch schon. Nur macht der Compiler nicht so ganz das was ich will, d.h. ich habe folgendes probiert um mit 1/sqrt(3) zu multiplizieren: #define PWM_SQRT3_INV_Q15 18919 //!< 1/sqrt(3) in q15 format => 1/sqrt(3)*2^15 lTemp_ = (long)iTemp_ * SQRT3_INV_Q15; // * 1 / sqrt(3) lTemp_ <<= 1; // format to q12 in high word x = (int)(lTemp_ >> 16); // store high word to x Der Compiler erzeugt nun im Listing einen Unterfunktionsaufruf um die beiden 16Bit Integer im long-Format zu multiplizieren. Er könnte jedoch auch einfach den mul-Befehl verwenden und temporär in einem 32Bit-Register arbeiten. Da ich Zeit sparen möchte würde ich dem Compiler also gerne den Funktionsaufruf verbieten. Ich habe das ganze auch mal auf einem Renesas-Compiler getestet und da wird alles so genacht wie ich es erwartet hätte. Hat vielleicht einer einen Tip wie ich den COmpiler überreden kann dass zu tun was ich möchte? Ich habe schon mit den verschiedensten Castings rumprobiert, allerdings ohne Erfolg :-( Viele kB Grüße, Ralf
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.