Forum: Compiler & IDEs LPC2148: libgcc mit software Floating Point Unterstützun


von H.Hammoud (Gast)


Lesenswert?

Hallo,

Nach dem Einrichten der Entwicklungsumgebung für ein LPC2148-Board von 
Olimex (Eclipse 3.2, Winarm (gcc 4.1.1) stellte sich heraus, dass die 
libgcc keine software floating point Unterstützung bietet (LPC2148 hat 
keine FPU und daher werden software routinen zur Simulation von float 
Operationen benötigt).

Meine Frage: wo kann ich eine entsprechend kompilierte libgcc mit 
software floating point Unterstützung finden??


Vielen Dank für eure Hilfe....



Grüsse,
H.Hammoud

von Andreas K. (a-k)


Lesenswert?

Ist in Winarm drin. Lass -msoft-float weg, das ist offenbar was anderes.

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Für ARM7TDMI generiert der Compiler nie Float-Befehle, deshalb ist 
-msoft-float da überflüssig. Das ist AFAIK nur beim ARM9 sinnvoll; wenn 
man da nämlich Float-Befehle verwendet ohne eine Float-Recheneinheit zu 
haben, dann werden diese Befehle i.d.R. vom Betriebssystem emuliert, was 
viel langsamer ist als wenn man dem Compiler gleich sagt dass er die 
Soft-Float-Funktionen direkt einkompilieren soll.

So habe ich das zumindest verstanden.

von H.Hammoud (Gast)


Lesenswert?

Hi,

Zunächst Danke für die Antwort.

Wenn ich den Schalter "-msoft-float" setze, dann meldet der Linker die 
Fehlermeldung, dass mein Code software floating points verwendet, 
während libgcc.a für hardware floating points kompiliert ist.

Lasse ich den Schalter "-msoft-float" weg, dann gibt es bei Floating 
Point Operationen Exceptions zur Laufzeit ....


Grüsse,
H.Hammoud

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Wie sieht denn dein Compileraufruf aus?

von H.Hammoud (Gast)


Lesenswert?

Hallo,

Compiler-Aufurf (ohne "-msoft-float"):
arm-elf-gcc -I../include -O0 -g3 -Wall -c -fmessage-length=0 
-mcpu=arm7tdmi -std=c99

Compilieren und Linken klappt ohne Probleme, aber:

Wenn ich als Beispiel u.a. folgende Code-Zeilen im Programm habe:
float x = 0;
x = x + 1;
Dann erhalte ich folgende Fehlermeldung zur Laufzeit(Debug):
source not found for:
2 __aeabi_fadd() ..\..\..\gcc-4.1.1\gcc\config\arm\ieee754-sf.S:73 
0x000011b8
Im Nicht-Debung-Modus wird der Mikrocontroller resettet.

Bei anderen Float-Operationen(*,/ usw.) erhalte ich entsprechend analoge 
Fehlermeldungen.


Danke für eure Hilfe.

Grüsse,
H.Hammoud

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.