Forum: Mikrocontroller und Digitale Elektronik FPU mit AVR32


von Sven P. (8051_einsteiger)


Lesenswert?

Hallo,

arbeite aktuell mit dem Atmel "AT32UC30512C" uC. Auf diesm möchte ich 
einige Fließkommaberechnungen durchführen, die aber ungweöhnlich lange 
Rechenzeiten benötigen. Dieser Controller besitzt laut Datenblatt eine 
FPU. Nun bin ich mir nicht sicher, ob er sie auch anwendet... Als 
Umwicklungsumgebung benutze ich atmel studio 6.

Trotz recherche im Internet bin ich bisher nicht weiter gekommen und 
habe auch fest gestellt, dass ich nicht der Einzigste mit diesem Problem 
bin.

Vll kann mir da jemand weiterhelfen.

(Im tollen Datenblatt finde ich leider auch nichts dazu :( )


Grüße

von Hoppla ! (Gast)


Lesenswert?

>Nun bin ich mir nicht sicher, ob er sie auch anwendet...


Allenfalls den ASM code vergleichen ?

von c-hater (Gast)


Lesenswert?

Sven P. schrieb:

> (Im tollen Datenblatt finde ich leider auch nichts dazu :( )

Das Datenblatt kann dir maximal verraten, ob das Teil eine FPU hat und 
wie man die ggf. aktiviert.

Es kann dir aber logischerweise nicht verraten, ob dein Programm das 
auch tatsächlich richtig macht und die FPU dann auch benutzt.

Asm-Programmierer tun's einfach.

C-ler müssen die Doku ihres Compiler und/oder ihrer IDE lesen, um 
herauszufinden, wie sie ihrem Compiler beibringen, es zu tun. Und den 
Asm-Zwischencode, den der Compiler produziert, um zu überprüfen ob er es 
tut.

von Christian (Gast)


Lesenswert?

oder du schaust einfach mal auf ein Beispiel wie das UC3C Scope Meter 
and filtering application, und vergleichst die Einstellungen die Du hast 
mit denen des Beispielprojektes. Dort wird die DSP/FPU schön 
demonstriert

von Sven P. (8051_einsteiger)


Lesenswert?

Habe eine Lösung gefunden mit der ich die Rechenzeit um die Hälfte 
verkürze.

Dem Compiler muss man über das Flag: "-mhard-float" anweisen, dass er 
die FPU nutzt. Des weiteren hab ich alle Konstanten mit dem Suffix "f" 
versehen, damit er nicht dies als Typ double behandelt.

Werde mir trotzdem mal das Beispiel anschauen! Vll. gibt es sonst noch 
Möglichkeiten die Performance zu verbessern. Leider kenn ich mich mit 
Assambler so gut wie gar nicht aus :/

Vielen Dank!

von Markus H. (dasrotemopped)


Lesenswert?

The 32-bit AVR CPU includes cutting-edge features such as integer and 
fixed point DSP arithmetic,
single-cycle multiply and accumulate instructions

http://www.atmel.com/Images/doc32120.pdf

fixed point DSP Lib
16-bit and 32-bit fixed-point
formats

ich sehe da keine FPU im AVR32 UC3

Floating Point and DSP Arithmetic
The 32-bit AVR DSPlibrary is a complete set of
math functions optimized in assembly by Atmel AVR
experts

Wenn das eine FPU drin wäre, müsste die dann in Assembler handoptimiert 
werden ? Oder werden die Integer Einheiten zur Emulation einer FPU 
benutzt ?

Gruß,

dasrotemopped.

von Markus H. (dasrotemopped)


Lesenswert?

selbst mit FPU ist nicht garantiert, das alle in C definierten 
mathematischen Funktionen auch in Hardware implementiert sind.
sin(), cos() usw werden gerne mal ausgelassen und über die in Hardware 
implementieren float  double Division  multiplikation in Software 
umgesetzt.

Gruß,

dasrotemopped.

von Christian (Gast)


Lesenswert?

Markus Horbach schrieb:
> ich sehe da keine FPU im AVR32 UC3

nur im UC3C ist eine FPU eingebaut, alle anderen haben "nur" die DSP.

http://www.atmel.com/Images/32117S.pdf

der UC3C war schon damals das was heute ein CM4F ist

wobei egal welche Platform, wenn man die FPU voll ausschöpfen will, muß 
man am besten die Assemblerbefehle verwenden. Selbst der Keil compiler 
nutzt den CM4F nicht wenn man keine in Assembler geschriebenen Routinen 
verwendet.
Die Compiler sind da nicht so weit entwickelt, ich weiß nicht wie IAR es 
macht, da könnte ich mir schon vorstellen dass der Compiler mehr von FPU 
gebrauch macht. Immerhin gibt es eine spezielle IAR Version für den 
AVR32

von Ma (Gast)


Lesenswert?

Der UC3C hat definitiv eine FPU, die vom gcc zumindest für Addition, 
Subtraktion, Multiplikation und das Casten zwischen Float und Int 
verwendet wird.
Sehen kann man das an den cop-Befehlen im Assemblercode.
Mit dem Parameter "-M decode-fpu", werden übrigens vom avr32-objcopy im 
Listing statt der "cop"-Befehle die (lesbaren) FPU-Mnemonics ausgegeben.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Sven P. schrieb:
> Des weiteren hab ich alle Konstanten mit dem Suffix "f"
> versehen, damit er nicht dies als Typ double behandelt.

GCC kenn auch -fshort-double, was alle double und double-Operationen in 
float umsetzt.  Allerdinds muß diese Option auch von der libgcc und der 
Libc unterstützt werden; für die newlib ist das zum Beispiel der Fall.

: Bearbeitet durch User
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
Noch kein Account? Hier anmelden.