Hallo,
ich versuche mich an der FPU des STM32F4 mit CooCox und
'gcc-arm-none-eabi'.
Die Multiplikation zweier Float-Zahlen aus der 'main.c' im Anhang
funktioniert und erzeugt im Disassembler den Befehl
08000288: vmul.f32 s15, s14, s15
Jedoch wird bei 'sqrtf()' die FPU anscheinend nicht benutzt, denn der
Disassembler zeigt
08000294: bl 0x8000570 <sqrtf>
statt
vsqrt.f32
wie es lt.
http://www.atmel.com/Images/Atmel-42144-SAM4E-FPU-and-CMSIS-DSP-Library_AP-Note_AT03157.pdf
und
Beitrag "Re: Floating Pointing Unit STM32F4"
eigentlich sein sollte.
Ich benutze 'gcc-arm-none-eabi 5.4'. Als libm.a verwende ich die aus dem
Verzeichnis
\arm-none-eabi\lib\armv7e-m\fpu
Andere Versuche mit
\arm-none-eabi\lib\fpu\libm.a
\arm-none-eabi\lib\armv7e-m\fpu\libm.a
\arm-none-eabi\lib\armv7-m\libm.a
\arm-none-eabi\lib\armv7-ar\thumb\fpu\libm.a
\arm-none-eabi\lib\armv7e-m\fpu\fpv5-d16\libm.a
bringen bestenfalls das gleiche Ergebnis, in manchen Fällen läuft auch
das Programm nicht mehr oder das Kompilieren/Linken bricht mit einer
Fehlermeldung ab.
Ich hatte irgendwo gelesen, dass die o.g.
\arm-none-eabi\lib\armv7e-m\fpu\libm.a
benutzt werden soll.
Allerdings ist ARMv7E-M meines Wissens die Architektur des Cortex-M7.
Die Architektur des Cortex-M4 ist lt.
https://de.wikipedia.org/wiki/ARM-Architektur
die ARMv7-M.
Ein Verzeichnis
\arm-none-eabi\lib\armv7-m\fpu
ist aber leider bei mir nicht vorhanden.
Kann mir jemand helfen?
Gruß
Dirk
P.S.:
Compileraufruf:
arm-none-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-mthumb -Wall -ffunction-sections -g -O0 -c -DSTM32F407VG -DSTM32F4XX
-DUSE_STDPERIPH_DRIVER -D__ASSEMBLY__ -D__FPU_USED
-IC:\CooCox\CoIDE\workspace\Testprojekt_02
-IC:\CooCox\CoIDE\workspace\Testprojekt_02\cmsis_boot
-IC:\CooCox\CoIDE\workspace
-IC:\CooCox\CoIDE\workspace\Testprojekt_02\cmsis_lib
-IC:\CooCox\CoIDE\workspace\Testprojekt_02\cmsis
-IC:\CooCox\CoIDE\workspace\Testprojekt_02\cmsis_lib\include
C:\CooCox\CoIDE\workspace\Testprojekt_02\main.c
Linkeraufruf:
arm-none-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
-mthumb -Wall -g -nostartfiles -Wl,-Map=Testprojekt_02.map -O0
-Wl,--gc-sections
-LC:\CooCox\CoIDE\configuration\ProgramData\Testprojekt_02
-Wl,-TC:\CooCox\CoIDE\configuration\ProgramData\Testprojekt_02/arm-gcc-l
ink.ld -g -o Testprojekt_02.elf ..\obj\startup_stm32f4xx.o
..\obj\main.o ..\obj\stm32f4xx_rcc.o ..\obj\stm32f4xx_gpio.o
..\obj\system_stm32f4xx.o -L..\..\.. -lm