Forum: Mikrocontroller und Digitale Elektronik FPU einheit AT32UC3C


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ich programmiere einen AT32UC3C mit Atmel Studio 6.1:
http://www.atmel.com/Images/doc32117.pdf

Ich mach sehr viel Berechnungen mit doubles. Da dieser µC eine FPU 
besitzt, würde ich gerne wissen, wie man diese nutzen kann? Wie kann ich 
die aktivieren oder ist die standardmäßig sowiso aktiv?

Dank, lG

von wendelsberg (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gert schrieb:
> oder ist die standardmäßig sowiso aktiv?

Diese Frage kannst Du Dir selbst beantworten, wenn Du im erzeugten 
Assemblercode nachsiehst.

wendelsberg

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Was würde denn im Assemblercode darauf hindeuten, dass die FPU verwendet 
wird?

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hat denn diese FPU einheit noch niemand von Euch genutzt?

Ich habe nun bei den ProjektProperties unter Toolchain -> Miscellaneous 
-> other flags: zusätzlich  -mhard-float eingegeben.

Es macht jedoch keine Unterschied im Output (Größe des 
Programmspeichers), wenn ich mit oder ohne  -mhard-float kompilliere.

von Optimax (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich habe die FPU vom UC3C schon mal für einen Regler benutzt, der intern 
mit bezogenen Größen arbeitet[...].

Sofern Du Atmel Studio 6.x? benutzt, wird automatisch die FPU aktiviert, 
das hat man geändert. Da gibts auch von Atmel noch eine AppNote zu 
(igrendwas mit der Linkereinstellung -mhard-float).

Du schreibst du verwendest viele Double-Operationen, da wird dir die FPU 
möglicherweise keinen allzu großen Geschwindigkeitsvorteil bringen, weil 
die nämlich nur Single-Precision macht.(ieee 754)
Implementiert sind Typumwandlung, +,-, Multiplikation, aber KEINE 
Division
-> möglichst alle Divisionen durch Multiplikationen ersetzen.

Im Assembler-Listing müsste sowas z.B stehen
cop == Coprozessor
 |
cop  cp0,cr0,cr14,cr12,0x58

VG
Optimax

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi,

Danke für dei Info!

Deswegen bemerke ich vermutlich keinen Unterschied im Programmspeicher, 
wenn ich nun -mhard -float bei den Compileroptionen hinzufüge.

Werde im Assemlebrcode gleich mal nachsehen, mit und ohne -mhard-float.

Das würde bedeuten, dass diese Einheit nur Geschwindigkeitsvorteile 
bringt, wenn man float verwendet, nicht aber bei double, ist das 
korrekt?

LG

von jetzt (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich denk schon. Es ist auch relativ schwer vermittelbar, weshalb man 
double auf einem Controller braucht. Fuer einen Regler ja nicht. Single 
Precision ist auch schwer vermittelbar. Und dann noch in Hardware. 3D 
Transformationen in Echtzeit?

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Was meinst du mit schwer vermittelbar?

von Optimax (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Naja, man kann schon double und auch floats benutzten. Das was dagegen 
spricht sind meist die zeitl. Anforderungen an das System im Sinne von 
Echtzeit und die Genauigkeit über Wertebereich (Sensoren & Aktoren).
Wenn man sich darüber im klaren ist, kann man das problemlos verwenden.

In welchem Bereich liegen denn die maximalen und minimalen Werte?
Oder anders, was hast du überhaupt vor zu berechnen, dass Du gleich 
double brauchst. Reicht nicht float aus?

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Es geht nur um eine Regelung, also werde ich wohl mit float auskommen...

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Optimax schrieb:
> Naja, man kann schon double und auch floats benutzten.

D.h. die FPU funktioniert nun doch auch für double oder wie soll ich das 
verstehen?

von Martin H. (marrtn)


Bewertung
0 lesenswert
nicht lesenswert
Manchmal kommt man nicht drumherum, selbst in die Doku zu schauen...

Versuchs mal mit http://www.atmel.com/images/doc32002.pdf

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo,
darin steht:
"Newer versions of UC3 CPU introduced optional floating-point hardware 
performing 32-bit floating-
point operations"

32 Bit, d.h. es funktioniert nur für float, nicht aber für double, 
richtig??

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kann das jemand bestätigen?

von Martin H. (marrtn)


Bewertung
0 lesenswert
nicht lesenswert
In dem Dokument ist auch aufgeführt, woher die Operanden der 
FPU-Kommandos kommen und wohin die Ergebnisse gehen --> Register. Und es 
steht auch drin, wie groß die Register sind --> 32 bit.

Wenn Du's lieber ausprobierst: Mach' doch einfach ein Programm, in dem 
mit doubles und floats gerechnet wird und schau Dir den Assembler-Output 
des Compilers an, was er aus den double-Rechnungen und was er aus den 
float-Rechnungen macht.

von Gert (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Und in diese 32Bit Register passen keine doubles richtig? Also 
funktioniert das nur für floats, und nicht für doubles, richtig?

Ich kenn mich in Assembler leider nicht gut genug aus, um das aus dem 
code beurteilen zu können...

Danke

von Martin H. (marrtn)


Bewertung
0 lesenswert
nicht lesenswert
Gert schrieb:
> Und in diese 32Bit Register passen keine doubles richtig?

Exakt...

Gert schrieb:
> Ich kenn mich in Assembler leider nicht gut genug aus, um das aus dem
> code beurteilen zu können...

Nur so als Tip: Befasse Dich ein bisschen damit. Du musst nicht in 
Assembler programmieren können (kann ich auch nicht), allerdings ist ein 
grundlegendes Verständnis sehr hilfreich.

In diesem Fall reicht es, zu schauen, ob die FPU benutzt wird, d.h. ob 
"cop"-Befehle verwendet werden. Wenn man es genauer wissen will, kann 
man dem Compiler mit "-M decode-fpu" sagen, dass er die FPU-Kommandos in 
lesbarer Form hinschreiben soll.
Zum Vergleich float vs. double kann man sich die Länge des generierten 
Assemblercodes (Anzahl der Kommandos) anzuschauen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.