Hallo, ich möchte auf einem STM32 Cortex M3 eine Fixed Point Divisionsroutine in Assembler erstellen. Wahrscheinlich ergeht es mir wie vielen anderen, die Multiplikation war nicht schwierig. Aber bei der Division komme ich nicht ganz weiter. Ich verwende das Q22.42 Format und benutze dazu 64 bit Variable (long long var). Bitte nicht auf ein Q16.16 Format verweisen, das schränkt vom Zahlenbereich zu sehr ein. Dabei sollte das Ergebnis einer Division von zwei Q22.42 Zahlen wieder ein Q22.42 Zahl sein. Es muss doch sicherlich irgendwo in den Tiefen des Netzes ein Paper/Tutorial/Library geben die soetwas für den STM32 in optimierter (Laufzeit) Form in assembler beschreibt?!?! Der STM32 erfreut sich ja ziemlicher beliebtheit. Ich habe mir jetzt schon echt die Finger Wundgegoogelt aber nichts zu wollen... Danke schonmal für hilfreiches und weiterführendes Material, Tipps oder Links!! Benedikt
>ich möchte auf einem STM32 Cortex M3 eine Fixed Point Divisionsroutine >in Assembler erstellen. Schreib die doch in C. Das Teil ist schnell genug dafür.
hi, http://forums.arm.com/index.php?/topic/14281-arm-fixed-point-vs-floating-point-cortex-m-3/ schau dir mal diesen Thread an. das ist zwar ein Q16.16 Beispiel was du nicht haben wolltest, aber skalier es doch auf 64bit hoch und teste es. Dann siehst du, wie der Compiler das in Assambler umsetzt, dann siehst du dir an was dir nicht gefällt und optimierst den Assambler Code. So würde ich vorgehen, wobei ich bisher immer mit 32Bit aus kam. Mfg tec
Hallo TecNologic, is nicht so einfach! Die größten Register die es im STM32 gibt haben 64 bit und für die division mit 64/64 bräuchte ich ja ein 128 bit register um daraus eine 128/64 zu machen. Die 16 bit routine ist für den STM32 kein Problem, das kann er schon in HW! Aber ich müsste ja eine 128/64 bit machen und da ist der knackpunkt! @holger ich gebe dir recht wenn ich nur ein paar divisionen machen müsste. Berechnet werden soll aber ein Kalamn filter mit einer systemmatrix von 17x17 ca. 300 Divisionen ergeben sich darus und es kommen noch einige von andern Berechnugen hinzu, sowie addition und multiplikation! Da kommt es mir schon sehr auf die Zykluszeiten meiner Routinen an! Grüße, Benedikt
>Berechnet werden soll aber ein Kalamn filter mit einer systemmatrix von >17x17 ca. 300 Divisionen ergeben sich darus und es kommen noch einige >von andern Berechnugen hinzu, Da langweilt der sich. Wie eilig hast du es denn?
Hi Holger, Ja bei den 300 wird es nicht bleiben, da habe ich echt viel zu tief gestapelt aber schau dir die gleichungen im anhang an, A,H,P,Q,K sind 17x17 matrizen und x und z sind 1x17. Du siehst das die matrizen wild miteinander verrechnet werden. Transponieren, Inverse, Multiplikationen... Du meinst wirklich der langweilt sich? Also wenn hier noch mehr der meinung sind das es wirklich schnell geht und ich mir keine sorgen wegen performance machen muss, dann bin ich schon mal 10kg leichter ;-) Woher nimmst du deine Erfahrung? Hattest du ähnlich projekte mit dem STM32 laufen? Viele Grüße, Benedikt
Ach ja, geschwindigkeit natürlich as fast as possible! Sagen wir im zweistelligen ms bereich sollte es schon sein!
>Du meinst wirklich der langweilt sich?
Ja. Und ich glaube das du dir mit deinem Q22.42
eine Genauigkeit in die Tasche lügst die du gar nicht
brauchst. Wo kommen die Daten her die du verarbeitest?
Aus einem 24Bit AD Wandler? Da wackeln die letzten 8 Stellen
doch sowieso nur random bei einem Anfängerlayout;)
Ich benötige diese genauigkeit auch nicht maßgeblich für die sensorwerte, sondern für werte die bei der berechnung "entstehen" wie kovarianzen und bei den systemrauschthermen. Aber klar, die genauigkeit ist hier bewusst über die maßen genau, ich will mir diese library auch für den späteren gebrauch bauen.
hi Benedikt, rein Interesse halber was für ein System 17. Ordnung hast du? Ich werde demnächst auch das Problem haben einen Kalman Filter mit Zustandsregelung in einem STM32 aufzubauen, dieses System bewegt sich aber in der größe 10. Ordnung. Vllt kann ich deine library auf mich herrunter brechen. MfG Tec
Hi, es geht mal wieder um ein Navigationssystem bzw. Lageregler, je nachdem ob GPS empfang da is oder nicht ;-)
Hi, sowas in der Richtung habe ich auch vor. Der Zeit beschäftige ich mich aber mit dem Kalman Filter, bzw der Ermittlung der Kovarianzen. Stellst du das irgend wo rein wenn du fertig bist? Oder ist das geschäftlich? MfG Tec
Die kovarianzen rechnet der filter doch "selbst"! Ich bin im moment noch am überlegen ob ich es öffentlich mache, eventuell später wenn ich etwas vorweisen kann! Aber erfahrungen austauschen und das ein oder andere ergebnis zur verfügung stellen, das ist doch klar! also wenn ich ne division habe wird die hier gepostet! Aber vielleicht gibt ja noch jemand einen wertvollen tipp dazu, wir würden jedenfalls freuen ;-) grüße, benedikt
Hi, ok dann habe ich da noch was falsch verstanden. Ich bin noch relativ am Anfang mit dem Filter, muss gerade noch meine Bachelorthesis fertig machen. Danach habe ich da wieder Zeit für Matlab zu quälen. MfG Tec
Hallo, kann mir denn keiner weiterhelfen? Wie teile ich 2 variable also 64bit zahl durch 64bit zahl??? Unglaublich aber ich finde im gaaanzen web nix, zu diesem speziellen problem. Der stm32 hat ja ein 32bit devide in HW und eine hw multiplikation mit 32x32 bit und 64 bit result, falls es bei der lösung von nutzen wäre. Danke schonmal, ich geb's langsam auf....
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.