Salut, mit dem Vorsatz, in Timer-relevanten Routinen (z.B. RC5-decoding) betreffende Immediates per Formel über die Konstante "XTAL" zu berechnen, bin ich auf Probleme gestoßen. Und zwar ist mir aufgefallen, daß teilweise unerwartete Werte aus den Berechnungen hervorgegangen sind, die evtl. mit der Rechengenauigkeit des Assemblers zu tun haben. Mein Assembler ist tavrasm 1.17 (Unix), in den Docs hab ich zu dem Thema leider gar nichts gefunden. Ein Beispiel: ldi temp, (XTAL / (UART_BPS * 16)) - 1 funktioniert. Aber es gab etliche andere Fälle, wo ähnliche Formeln versagt haben. Ich habe dann das entsprechende Ergebnis per Hand eingetragen und es klappte. Sorry, daß ich jetzt kein Beispiel für das Gegenteil geben kann, aber in meinen Sources find ich gerade nichts mehr. Hab alles schon durch Werte ersetzt. ;( Aber meiner Erinnerung nach waren es sogar simple Divisionen. Weiß jemand, mit welcher Genauigkeit der Assembler Immediates berechnet? Oder kann mir sonst jemand einen allgemeinen Tip geben? Ausführliche Klammersetzung hat auch nicht zum Erfolg geführt. Ein Ziel dieser ganzen Sache ist es, im Source verstreute Werte durch einfaches Ändern einer Konstante "XTAL" anzupassen. Eben z.B. um das Adaptieren der RC5-Decoderroutine an verschiedene Frequenzen zu erleichtern. Danke für Eure Hilfe! Mark H. -- http://markh.de
tavrasm rechnet intern nur mit Integern, wenn ein Teilausdruck also z.B. (4/3) ist wird er durch 1 ersetzt und verfälscht das ganze Ergebnis. Andreas
Salut, zuerst mal danke! Sowas hatte ich geahnt. Gibt's ne Dokumentation als Referenz zu diesem Thema, oder woher weißt Du's (wohl in den Sourcen geschnüffelt, was? :))? Hmm, also erst schön alles multiplizieren und erst am Ende dividieren. Mehr fällt mir dazu nicht ein. Wenn ich nur nicht das dumme Gefühl hätte, das schon erfolglos probiert zu haben... Nu ja, ich meld mich wieder, wenn ich unklare Beispiele parat habe. Mark H. -- http://markh.de/avr/
Hi! Das hatte ich jetzt auch mal. Das Probl. es wird nicht gerundet sondern der Nachkommateil wird weggelassen. also muss man selber runden. In der Codesammlung habe ich es jetzt mal verwendet->"für An und Abschneider" Gruss Uwe
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.