Forum: Compiler & IDEs STM32F103, Hard-Fault bei Float Operation


von Marco (Gast)


Lesenswert?

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

von holger (Gast)


Lesenswert?

>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.

von Marco (Gast)


Lesenswert?

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.

von holger (Gast)


Lesenswert?

>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.

von Marco (Gast)


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.