STM32F103, Hard-Fault bei Float Operation

Gast #3265596
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
Gast #3265838
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.
Gast #3266066
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.
Gast #3266074
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.
Gast #3266080
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.
Gast #3266434
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.

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