mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik BusFault Exception mit gmtime


Autor: Star Keeper (starkeeper)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Star Keeper (starkeeper)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.