Forum: Compiler & IDEs GCC libc mit cortex-m0 berursacht einen HardFault


von David S. (david_s97)


Lesenswert?

Ich vesuche gerade von einem vorherigem Makefile von mir für den 
stm32f103 ein Makefile für den stm32f030 zu schreiben. Dieses compiliert 
jetzt auch ohne Probleme aber wenn ich es auf den Micro draufflashe 
kommt er im Startupfile nur bis zum libc call (bl __libc_init_array) und 
springt dann zum Hardfault Handler (laut gdb  versucht er noch den 
ersten Befehl auszuführen). GCC kompiliert auch ordentlichen C code da 
vor der libc noch die SystemInit Funktion aufgerufen wird, die ohne 
Probleme funktioniert.
Laut gdb ist das der erste Befehl der libc, der ausgeführt wird. Danach 
bleibt er im Hardfault(in einem loop):
1
0x8000b3c <__libc_init_array>           push   {r4, r5, r6, lr}
Der Compileraufruf ist der folgende für .o:
1
arm-none-eabi-gcc -mcpu=cortex-m0 -march=armv6-m -mthumb -mfloat-abi=soft --specs=nosys.specs  -fno-strict-aliasing -fdata-sections -ffunction-sections -mlong-calls -Wall -g -Os  -DSTM32F030x6 -o Src/main.o  -c Src/main.c (Includes)
Fürs Linken:
1
arm-none-eabi-gcc -mcpu=cortex-m0 -march=armv6-m -mthumb -mfloat-abi=soft --specs=nosys.specs  -fno-strict-aliasing -fdata-sections -ffunction-sections -mlong-calls -Wall -g -Os  -DSTM32F030x6 -o main.elf ./Src/main.o (andere .o der Lib usw.) ./startup_stm32f030x6.o -specs=nano.specs -Wl,--gc-sections -Wl,-script="./STM32F030F4_FLASH.ld"
Der ggc ist der aktuellste von Linux Arch.
Hier ist der komplette Ordner:
https://mega.nz/#!HNgBDCCB!OUOFx1H3guuJdCuakYlGDawSm7o4LMpC2PARRXL-rS0

von mega (Gast)


Lesenswert?

Kommentiere in deinem Startup-Code mal __libc_init_array in Zeile 103 
aus:
1
/* Call static constructors */
2
    /*bl __libc_init_array*/

Sollte danach mit dem GCC gehen ;)

von David S. (david_s97)


Lesenswert?

Wenn ich die libc entferne, gibr es beim Anfang der main funktion ein 
Hardfault Error:
[code]
0x80001c4 <main>        push   {r4, lr}
[/code

von (prx) A. K. (prx)


Lesenswert?

Klingt nach Stackfehler, wenn stets der erste PUSH auf die Nase fällt. 
Also Speichergrenzen falsch eingestellt.

von hp-freund (Gast)


Lesenswert?

4k RAM?
Stack Ende steht auf 8k.

von David S. (david_s97)


Lesenswert?

Ok Danke, Im Linkerfile musste man noch die Obergrenze des Rams noch 
manuell einstellen. Hab ich natürlich verpasst.Weil ich den 030f4 
benütze der 4K hat, hat das nicht funktioniert. Jetzt funktionierts auch 
mit der Libc. Danke für die Hilfe

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.