Ihr habt mir ja neulich schon sehr geholfen... Nun stehe ich vor einem neuen Problem, ich brauche mal wieder eine Division (diesesmal andersrum): Und zwar hab ich eine Konstante (in diesem Fall 37500) die ich durch einen Timerwert (16 Bit Variable) teilen muss... Hat jemand ne Idee, wie man das mit weniger als 200 Takten hinbekommt? Freue mich auf eure Antworten! Viele Grüsse Boese
es gibt doch sicherlich appnotes bei Atmel, die solche Grundfunktionen beschreiben. Oder nicht? Wenn die nicht genau den Fall haben, den Du brauchst, dann gibt's mit großer Wahrscheinlichkeit etwas zum allgemeineren Fall Variable/Variable, wo man ja nur noch eine Variable durch einen Konstanten Wert ersetzen muß.
Hallo Jens, ja es gibt divisionsroutinen... Allerdings bin ich der Meinung dass es bestimmt schneller geht, wenn sich da mal n mathe-genie mit beschäftigt (siehe mein Posting von gestern, da kam eine Routine raus, die 20 Takte braucht anstatt die 240 (Atmel-appnote variante)). Gruss
Hallo, die Frage ist in welchem Wertebereicht das Ergebniss liegt. Wenn es z.b. zwischen 1 und 10 liegt dann kannst du einfach den Timerwert so lange addieren bis du >= der Konstante bist und einfach die Anzahl zählen.
Atmal AN200: 173 Takte. Division durch eine Konstante lässt sich u.U. durch Multiplikation mit einer Variablen und Division durch 2-er Potenz ersetzen. Aber hier ist das ja andersrum, da wäre mir das neu.
tja, aber hier dividieren wir jetzt durch eine Variable - da wirds sicherlich weit schwieriger.
Hallo, die Wuzel aus 37500 ist ca. 194. Also kann man mit einer Tabelle aus 194 Wertepaaren das Ergebnis recht genau berechnen. Ist die Zahl durch die dividiert wird grösser, muss die richtige Stelle in der Ergebnisspalte gesucht werden. Das kann man binär machen. Ob das schneller ist, habe ich nicht untersucht. Bis 194 ist das eine einfache Adressrechnung. Gruss
naja, das sind ja aber alles solche Krücken, die letztendlich eine Vereinfachung durch Reduzierung der Genauigkeit und Wertebereiche anstreben. Da müsste Boese genauer spezifizieren, welche Anforderungen er diesbezüglich hat. Mein Gefühl sagt mir jedenfalls, daß das ohne Beschränkungen in diesem Falle kaum gehen wird. Vielleicht kann er auch das Programm mal dahingehend untersuchen, ob sich solche Divisionen nicht auch in weniger zeitkritische Bereiche verlegen lassen . Wenn das Ergebniss z.B. nur in der Anzeige erscheinen soll, intern aber sonst nicht weiterverarbeitet werden soll, dann muß man sowas ja nicht unbedingt in einer zeitkritischen INT Routine machen. Oder irgendwelchen User-Input kann man schon zu irgendwelchen Zwischenergebnissen vermatschen, welche dann in zeitkritischeren Bereichen verwendet werden fürs endgültige Ergebnis. Hängt natürlich alles vom konkreten Fall ab.
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.