Hallo zusammen, ich programmiere für einen STM32F103 Microcontroller. Meine Programmierumgebung besteht aus: - Eclipse Juno - CDT GCC Cross Compiler Support - Codesourcery G++ arm-2013.05 oder arm-2010q1 - ST-Link GDB server 1.4.0 - ST-Link V2 Debugger Mein Quellcode lässt sich fehlerfrei compilieren und linken. Die Ausführung ist grundsätzlich auch kein Problem. Lediglich bei der Ausführung einer Float-Operation bzw. beim Deklarieren einer Float-Variablen geht der uC in den HardFault-Handler. Der uC hat keine FPU und deshalb compiliere und linke ich mit dem Flag -mfloat-abi=soft (ist so an verschiedenen Stellen des Webs so beschrieben.). Ich habe inzwischen alle Beiträge im Web gelesen, die ich zu dem Thema finden kann. Allerdings hilft mir bisher nichts weiter. Ich habe schon alles ausprobiert, das irgendwo beschrieben ist. Meine Beispiel-Quellcodezeile sieht wie folgt aus: uint32_t Var = 100; float Result = ((float)Var / 10.0); Meine Compiler-Flags sind: -c -mcpu=cortex-m3 -mthumb -mfloat-abi=soft -std=gnu99 -ffunction-sections -fdata-sections -fmessage-length=0 Meine Linker-Flags sind: -T${ProjDirPath}\stm32_128k_20k_flash.ld -mcpu=cortex-m3 -mfloat-abi=soft -mthumb -ffunction-sections -fdata-sections -Wl,--gc-sections -static Hat jemand eine Idee wo das Problem liegen könnte? Ich bin für jeden Tipp dankbar. Viele Grüße Marco
>Der uC hat keine FPU und deshalb compiliere und linke ich mit dem Flag >-mfloat-abi=soft (ist so an verschiedenen Stellen des Webs so >beschrieben.). -mfloat-abi=soft braucht auch eine FPU. Compiliere mit Toolchain default oder wie auch immer das heisst. Lass -mfloat-abi=soft auf jeden Fall weg.
Danke für die Antwort. Leider hilft es mir nicht weiter. Ich hatte das Flag zuerst nicht angegeben gehabt. Erst nachdem das Problem auftrat hatte ich das Flag hinzugefügt. Ich habe es jetzt noch mal ausführlich ohne dem Flag getestet. Das Problem bleibt.
>Lediglich bei der Ausführung einer Float-Operation bzw. beim Deklarieren >einer Float-Variablen geht der uC in den HardFault-Handler. Das Problem hatte ich noch nie auf einem STM32F103. Bei dir ist was oberfaul. >Das Problem bleibt. Zeig deinen vollständigen Code.
Jetzt läuft es bei mir. Der Fehler lag bei dem Pfad zu den Libs. Geht nicht: "${eclipse_home}\..\Sourcery CodeBench Lite\lib\gcc\arm-none-eabi\4.7.3" Geht: "${eclipse_home}\..\Sourcery CodeBench Lite\lib\gcc\arm-none-eabi\4.7.3\thumb2" Eine versteckte Info im ST-Forum hat mich darauf gebracht. Das FPU Flag ist übrigens nicht angegeben. Warum das Flag laut dem Artikel http://www.mikrocontroller.net/articles/STM32 angegeben werden sollte für einen Cortex-M3 ist mir schleierhaft.
holger schrieb: > -mfloat-abi=soft braucht auch eine FPU. Falsch, laut GCC Doku: "Specifying soft causes GCC to generate output containing library calls for floating-point operations." holger schrieb: > Lass -mfloat-abi=soft auf jeden Fall weg. Da -mfloat-abi nur einen von den drei Werten soft (ohne FPU), softfp und hard (beide mit FPU) annehmen kann, würde es wenn schon eher DOCH FPU-Code genererieren, als mit "soft". Wenn es ohne -mfloat-abi funktioniert ist es Glück da dann offenbar der Compiler "soft" als Default annimmt, aber es anzugeben ist sauberer. Marco schrieb: > Der Fehler lag bei dem Pfad zu den Libs. Gib mal gar keinen Library-Pfad an, dann findet zumindest der GCC-ARM-Embedded automatisch die korrekten Libs. Marco schrieb: > Warum das Flag laut dem Artikel > http://www.mikrocontroller.net/articles/STM32 angegeben werden sollte > für einen Cortex-M3 ist mir schleierhaft. Weil es wie oben erläutert so richtig ist.
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.