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
Ein leeres _sbrk() kann ja auch nicht funktionieren. Du musst halt in deinem Prozessor einen funktionierenden Heap implementieren. Ohne geht malloc und co nicht.
sbrk - Beitrag "Re: ARM - Probleme mit sprintf (Linkerfehler)" und der rest - Beitrag "Re: ARM - Probleme mit sprintf (Linkerfehler)"
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.
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
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.