Wie funktioniert ein AVR führen Gleitkomma-Arithmetik
Ich versuche zu implementieren, die eine Unterstützung für double
und float
und entsprechende grundlegende arithmetische Operationen auf eine CPU ohne FPU.
Ich weiß, dass es möglich ist, auf alle AVR ATmega controllers
. Ein ATmega hat auch keine FPU. So, hier kommt die Frage: Wie funktioniert es? Wenn es Anregungen für Literatur oder links mit Erklärungen und Beispielen?
Im besten Fall werde ich eine Unterstützung für code wie dieser:
double twice ( double x )
{
return x*x;
}
Vielen Dank im Voraus,
Alex
- Sie benötigen ein floating-point-library. Verknüpfen Sie es in, erhalten Sie FP-Operationen, ebenso wie FP-hardware, nur langsamer.
- zweimal() für eine Funktion, die Quadrate einer Zahl ist eine außergewöhnlich schlechte Wahl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind hier AVR weiterführende links mit Erklärungen und Beispiele für die Implementierung von soft-Doppel:
Dieser Beitrag für Sie interessant sein könnten: Floating-point-Berechnungen in einem Prozessor ohne FPU
Wie gesagt:
Wenn es ein ATmega, die Sie wahrscheinlich nicht haben, etwas zu schreiben, selbst. Alle bereits verfügbaren Bibliotheken sind wohl schon optimiert, viel weiter, als es Ihnen möglich selbst tun können. Wenn Sie brauchen mehr Leistung, Sie könnte in Erwägung ziehen zu konvertieren, schwebende Punkte, um Feste Punkte. Sollten Sie diesen trotzdem. Wenn Sie können den job zu erledigen in der Feste Punkt, sollten Sie bleiben Weg von floating point.
Avr verwendet AVR-Libc, die Sie herunterladen und prüfen.
Es ist eine Mathematik-Bibliothek, aber das ist nicht, was Sie suchen. Enthält der standard definierten Funktionen in der Mathematik.h.
Statt, benötigen Sie Funktionen, die Sie durchführen, Vermehrung und Dinge wie die. Diese sind auch in der Libc, unter fplib und in Assembler geschrieben. Aber der Benutzer nicht rufen Sie Sie direkt. Statt, wenn der compiler kommt über eine Multiplikation mit floats, der compiler wählt die richtige Funktion einfügen.
Können Sie durch die AVR fplib um eine Idee zu bekommen, was zu tun ist, aber Sie gehen zu müssen, zu schreiben, Ihre eigenen Montage-oder bit-twiddling-code für den Prozessor.
Müssen Sie herausfinden, was Ihre standard-Prozessor und Sprache sind für floating point. IEEE, vielleicht? Und Sie müssen auch wissen, ob das system ist little-endian oder big-endian.
Nehme ich an, dass Ihr system nicht über einen C-compiler bereits. Ansonsten, alle die floating-point-Operationen würden bereits umgesetzt werden. Das "
twice()
" - Funktion (eigentlichsquare()
) funktioniert gut, wie es ist.