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
>Nun bin ich mir nicht sicher, ob er sie auch anwendet...
Allenfalls den ASM code vergleichen ?
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.
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
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!
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.