Hallo, zusammen! Hat jemand schon einmal eine Newlib/GCC-Kombination gebaut (mit Windows als Host), die die FPU des STM32F4 unterstützt? Bei CodeSourcery gibt es die Newlib ja nur als Soft-Float-Version. Christian
Gebaut nicht, aber es gibt was fertiges: https://launchpad.net/gcc-arm-embedded/ man sollte allerdings das Linkerscript anpassen wie hier: Beitrag "STM32 + ARM-GCC: Linker produziert falsche Adressen"
Guckst du hier: http://forum.chibios.org/phpbb/viewtopic.php?f=2&t=337 und hier: Beitrag "Verdacht auf GCC / Library Fehler ARM - Toolchain" die lib hat damit gar nichts zu tun.Es gibt keine spezial - lib zur Unterstützung der FPU... Gruß Thilo
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
ReinerL schrieb: > https://launchpad.net/gcc-arm-embedded/ Oh. Das kannte ich noch nicht. Danke für den Tipp! Christian
> 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
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
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
THaala schrieb: > Wenn Du die den Thread bei Microcontroller > mal ansiehst wirst du entdecken, das alle Funktionen, die du genannt > hast über die FPU gehen. Die Berechnung trigonometrischer Funktionen läuft direkt auf der Hardware? Christian
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
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
ReinerL schrieb: > bei meiner Suche bin ich dann auf > die Toolchain von Launchpad gestoßen Die oben bereits erwähnte Seite (https://launchpad.net/gcc-arm-embedded) ist genau das, was ich gesucht habe: komplette Toolchain mit expliziter Unterstützung für Cortex-M4-CPUs mit und ohne FP-Unterstützung (sowohl soft als auch hard). Christian
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
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
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
>> 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.
THaala schrieb: > Hast Recht - Entschuldige! Kein Problem. Aber der von dir verlinkte Thread ist auch interessant. Den muss ich mir allerdings mal in Ruhe zu Gemüte führen. Christian
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.