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
>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,
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....