Hi, ich habe ein Problem bei der Benutzung der Funktion "gmtime". Ich arbeite auf einem STM32 und benutze den Kompiler und die Libs von Yagarto. Immer wenn ich in meiner Software die Funktion "gmtime" aufrufe wird im Controller eine BusFault-Exception ausgelöst. Woran kann das liegen? Was soll mir die Exception sagen?
Die bus fault Exception besagt, dass das Programm versucht, Daten an einer Stelle zu speichern, an der kein Speicher ist. gmtime() arbeitet mit einem statischen Puffer, dessen Adresse (oder NULL im Fehlerfall) zurückgegeben wird. Wenn man die Source der Library hat, könnte man untersuchen, ob die Libraryfunktion einen Bug beim erzeugen dieses Puffers hat, Wenn die Library ein gmtime_r() hat, könntest du diese stattdessen ausprobieren. Bei dieser Funktion musst du den Zielpuffer angeben.
Danke! Das war der Tipp den ich benötigt habe. Die gmtime-Funktion ruft sbrk_r auf, um sich Speicher zu holen. Diese Funktion scheint bei mir nicht korrekt zu funktionieren, jedenfall liefert sie immer den Error ENOMEM zurück. Irgendwie ist mein Stack-Pointer immer kleiner als mein Heap-End und die Funktion geht davon aus, dass die umgekehrt ist. Mit der Funktion gmtime_r funktioniert es jedenfalls.
Wenn ich das Verhalten bei einem ARM hätte, würde ich vermuten: Das Linkerkontrolskript LCS (oder der Startupcode) passt nicht auf das µC-Modell. Ich würde als erstes die Angaben zur ROM und RAM Bereichen LCS korrekt kontrollieren, weil darin die Werte für sbrk_r initialisiert werden.
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.