Forum: Mikrocontroller und Digitale Elektronik Immediates zur assemblierzeit berechnen (Genauigkeit?)


von Mark Hämmerling (Gast)


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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von Mark Hämmerling (Gast)


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/

von Uwe (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.