Problem mit malloc() + arm-none-eabi-gcc + newlib

Gast #4871152
Lesenswert?

Hallo,

ich programmiere gerade für den STM32 mit arm-none-eabi und der newlib. 
Eine kleine 'blinky' Demo läuft.

Sobald ich aber malloc() aufrufe gibt es Probleme.

Zuerst hat sich der Linker beschwert, dass die Funktion _sbrk() nicht 
gefunden werden kann. Diese habe ich nun (zu Testzwecken) leer 
implementiert. Der Linker linkt jetzt.

Allerdings springt der STM32 direkt in den HardfaultHandler() bei 
ausführen von malloc() - und zwar ohne zuvor _sbrk() auszuführen.

Den build des GCC und der newlib habe ich nach dieser Anleitung 
durchgeführt:
http://fun-tech.se/stm32/gcc/index.php

Da ich mich in das Thema erst einarbeite, bin ich etwas ratlos, wie ich 
den Fehler debuggen kann.

Ich bin jede Hilfe dankbar. Peter
#4871694
Lesenswert?

Peter schrieb:
> Allerdings springt der STM32 direkt in den HardfaultHandler() bei
> ausführen von malloc() - und zwar ohne zuvor _sbrk() auszuführen.

Dann ist was kaputt. Aber eine leere Funktion kann den Debugger 
durcheinander bringen, mach da mal wenigstens ein __NOP(); rein.

Übrigens können bessere Debugger (auch GDB) Dir anzeigen wo der 
Hardfault ausgelöst wurde - Du hast ja alle Quellen da.
Gast #4875352
Lesenswert?

So,

ich habe jetzt eine ganze Weile getestet, aber es will nicht laufen.

Deshalb hänge ich mal meine Dateien an und hoffe, dass jemand mal 
drüberschaut und den Fehler findet.

Anbei:
- main.c (LED an/aus)
- system.c (_sbrk(), HardfaultHandler() usw.)
- stm32f103_flash.ld (Linker Script)
- makefile

Wenn ich die Zeile mit
1
ptr = (uint8_t *)malloc(1);

ausmaskiere, dann läuft es. Andernfalls springt der STM32 ohne Aufruf 
von _sbrk() direkt in den HardfaultHandler().

Gruß, Peter
Angehängte Dateien:

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