Immediates zur assemblierzeit berechnen (Genauigkeit?)

Gast #14287
Lesenswert?

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
Gast #14289
Lesenswert?

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/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren