[STM32F4] Newlib/GCC mit FPU-Unterstützung

OP #2675760
Lesenswert?

THaala schrieb:

> Es gibt keine spezial - lib zur Unterstützung der FPU...

Man muss den mathematischen Teil der Newlib (sin, cos, usw.) mit 
FPU-Code bauen. Das geschieht bei Multilib-Builds während des Baus der 
gesamten Toolchain. Und da die Multilib-Vektoren (wenn ich das richtig 
sehe) hart in den GCC einkompiliert werden, kann man die Newlib 
nachträglich nur unter erschwerten Bedingungen kompilieren.

Korrigiert mich, wenn ich hier falsch liege.

Christian
Gast #2675798
Lesenswert?

> Man muss den mathematischen Teil der Newlib (sin, cos, usw.) mit
> FPU-Code bauen. Das geschieht bei Multilib-Builds während des Baus der
> gesamten Toolchain. Und da die Multilib-Vektoren (wenn ich das richtig
> sehe) hart in den GCC einkompiliert werden, kann man die Newlib
> nachträglich nur unter erschwerten Bedingungen kompilieren.

> Korrigiert mich, wenn ich hier falsch liege.

Ja  - da korrigiere ich Dich. Wenn Du die den Thread bei Microcontroller 
mal ansiehst wirst du entdecken, das alle Funktionen, die du genannt 
hast über die FPU gehen. (Achtung ist nur eine 32 Bit FPU - also nur 
floats keine doubles...)

Sobald Funktionen ins Spiel kommen, die nicht per FPU machbar sind wird 
auf die lib gewechselt. Z.B. beim Rechnen mit double statt mit floats.

Ist also eine reine Compiler - Einstellung!

Gruß Thilo
Gast #2675811
Lesenswert?

THaala schrieb:
> die lib hat damit gar nichts zu tun.Es gibt keine spezial - lib zur
> Unterstützung der FPU...

Die Aussage stimmt nur bedingt. Die HW-FPU kann ich auch mit Sourcery 
für float benutzen, verwende ich Funktionen aus der Lib, dann muss diese 
aber auch zur FPU passen.

Gruß
Reiner
Gast #2675819
Lesenswert?

Hallo Reiner,

hast du da mal ein Beispiel ?

Ich konnte während der Untersuchung bzgl. der FPU - Compiler - 
Einstellungen nichts derartiges finden. Ich Frage mich ja auch wieso 
denn da die lib zur FPU passen muss ? Ist die FPU passend, generiert der 
Compiler FPU - Code. Ist die FPU nicht passend wird die Lib aufgerufen. 
Natürlich mit entsprechnder Syntax, aber die muss ja sowieso stimmen, 
auch wenn keine FPU da wäre....

Gruß thilo
OP #2675841
Lesenswert?

ReinerL schrieb:

> Die HW-FPU kann ich auch mit Sourcery
> für float benutzen, verwende ich Funktionen aus der Lib, dann muss diese
> aber auch zur FPU passen.

Genau darum geht es mir. Der Compiler kann (mit der entsprechenden 
Option) Code für die FPU generieren. Sobald ich aber Funktionen aus der 
Newlib verwenden möchte (die ja vorkompiliert vorliegt), beschwert sich 
der Linker, da unterschiedliche Float-ABIs verwendet werden.

Ursächlich dafür ist die Multilib-Konfiguration, die beim 
Standard-Codesourcery-Build leider keine FPU-Versionen umfasst. Versucht 
man nun, Object-Dateien, die mit FPU-Unterstützung kompiliert wurden, 
mit einer Newlib-Variante, die ohne FPU-Unterstützung kompiliert wurde, 
zusammenzulinken, wird feststellen, dass das nicht funktioniert.

Christian
Gast #2675860
Lesenswert?

Christian Gudrian schrieb:
> Ursächlich dafür ist die Multilib-Konfiguration, die beim
> Standard-Codesourcery-Build leider keine FPU-Versionen umfasst. Versucht
> man nun, Object-Dateien, die mit FPU-Unterstützung kompiliert wurden,
> mit einer Newlib-Variante, die ohne FPU-Unterstützung kompiliert wurde,
> zusammenzulinken, wird feststellen, dass das nicht funktioniert.

Das ist auch genauso meine Erfahrung, bei meiner Suche bin ich dann auf 
die Toolchain von Launchpad gestoßen, da hat sich der Linker auch nicht 
mehr beschwert.
Hat zumindest bei sqr() funktioniert, nur der blöde Fehler mit dem 
Linkerscript hat mich einiges an Zeit gekostet.

Gruß
Reiner
Gast #2675874
Lesenswert?

Ein letztes Mal versuche ich es noch:

Es gibt keine Lib, die etwas mit der FPU zu tun hat. Du findest keine 
Toolchain, die für eine FPU eine Unterstützng bietet. Es finden keine 
Aufrufe in eine float - ABI statt, es sei denn du verwendest "double" - 
Argumente. Ich schätze, du hast ein anderes Problem.

Damit das richtig klappt muss man dem Compiler aber auch die richtigen 
Switches mitgeben:

 -falign-functions=16
 -mfloat-abi=softfp
 -mfpu=fpv4-sp-d16
 -fsingle-precision-constant

Hast du überhaupt in die Threads reingeschaut ?

gruß Thilo
Gast #2675912
Lesenswert?

THaala schrieb:
> Es gibt keine Lib, die etwas mit der FPU zu tun hat.

Ich glaube wir reden aneinander vorbei. In dem Thread habe ich nicht 
gesehen dass Du eine mathematische Funktion aus der Lib aufgerufen hast.
Es geht z.B. darum mathematische Funktionen aus der Lib zu verwenden, 
und bei diesen die FPU Ünterstützung zu haben.
Das wird mit "-mfloat-abi=softfp" nicht funktionieren, bzw. es wird die 
soft-float Lib verwendet.

Gruß
Reiner
OP #2675913
Lesenswert?

THaala schrieb:

> Es gibt keine Lib, die etwas mit der FPU zu tun hat.

Ich glaube, wir reden aneinander vorbei. Nach meiner Definition hat die 
libm beispielsweise etwas mit der FPU zu tun. Denn die ist voll von 
Gleitkommaoperationen.

> Ich schätze, du hast ein anderes Problem.

Mag sein. Schätze mal los. Vielleicht verstehen wir uns dann besser. :)

> Hast du überhaupt in die Threads reingeschaut?

Das habe ich. Leider befassen die sich nicht mit meiner Frage, die 
mittlerweile auch zufrieden stellend beantwortet wurde. Die oben 
verlinkte Toolchain baut nämlich die Newlib in folgenden 
Konfigurationen:
1
.;
2
thumb;@mthumb
3
fpu;@mfloat-abi=hard
4
armv6-m;@mthumb@march=armv6s-m
5
armv7-m;@mthumb@march=armv7-m
6
armv7e-m;@mthumb@march=armv7e-m
7
armv7-r/thumb;@mthumb@march=armv7-r
8
armv7-r/thumb/fpu;@mthumb@mfloat-abi=hard@march=armv7-r@mfpu=vfpv3-d16
9
armv7e-m/fpu;@mthumb@mfloat-abi=hard@march=armv7e-m@mfpu=fpv4-sp-d16
10
armv7-r/thumb/softfp;@mthumb@mfloat-abi=softfp@march=armv7-r@mfpu=vfpv3-d16
11
armv7e-m/softfp;@mthumb@mfloat-abi=softfp@march=armv7e-m@mfpu=fpv4-sp-d16
Es sind genau die */fpu-Konfigurationen, die bei CodeSourcery fehlen. 
Und die habe ich gesucht. Und jetzt gefunden.

Mehr wollte ich nicht.

Christian
Gast #2675926
Lesenswert?

>> Ich glaube, wir reden aneinander vorbei. Nach meiner Definition hat die
>> libm beispielsweise etwas mit der FPU zu tun. Denn die ist voll von
>> Gleitkommaoperationen.

Hast Recht - Entschuldige!

Gruß T.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren