www.mikrocontroller.net

Forum: Compiler & IDEs GNUARM FP mit sprintf


Autor: roty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte mich nicht gleich steinigen wenn ich nochmals das Thema
FP mit sprintf hier aufrolle. Aber alle Hinweise hier im Forum haben
mir nicht geholfen.

Ich habe das Problem, dass MANCHMAL bei sprintf mit %f ein Data Abort
Exception auftritt. Ich kann eindeutig nachvollziehen, dass diese
Exception aus der Library heraus passiert.

Als relativer GNU Anfänger wäre ich für sachdienliche Hinweise was ich
falsch mache sehr dankbar.


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
D.h. Fortsetzung von
Beitrag "Data Abort Exception durch Library"

Nachdem ich dich damals leider aufs Glatteis geführt hatte, will ich was 
gut machen. Ich biete dir an, den Fehler soweit möglich zu debuggen. Ich 
habe nämlich seit neustem auch einen USB-JTAG-OCD und das muss laufen.

Kannst du dein Projekt so strippen, dass es schön klein ist, aber immer 
noch der Fehler kommt?

Autor: roty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,

war dir nie böse, ist schon ok! Danke für das Angebot.

Ich habe den betreffenden Code extrahiert und ein ganz kleines Programm 
erstellt. Leider tritt da das Problem nicht mehr auf. Ich kann hier auch
debuggen. Allerdings habe ich den Quellcode der Library nicht, kann also 
nur
Assembler Code sehen. Weisst du wo ich den Quelltext dazu finde kann ?
Das Programm schmiert in meinem gro0en Programm zuverlässig im Modul 
..\mprec\_d2b\+0x6C ab.

Grüsse

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Funktion d2b() befindet sich in mprec.c im libc Ast der newlib.

Die newlib Sourcen 1.12.0, 1.13.0 oder 1.14.0 für deine GNUARM Version 
3.3, 3.4, 4.0 oder 4.1 findest du bei http://www.gnuarm.com/files.html

Autor: roty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dank sehr.

Habe es gefunden . Ich kann jetzt auch den Quellcode sehen und kann
sagen welcher Zugriff in den Flashbereich greift anstatt in den RAM
Bereich.
Leider verstehe ich nicht was dort in der Lib eigentlich gemacht wird.
Muss mal heute Abend weitersehen und vergleichen was im Fehlerfall und
im Nichtfehlerfall dort passiert.
Eventuell komme ich nochmals auf dich zurück, wenn man schon mal einen
Experten zur Hand hat!

Danke

Autor: roty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat mir jetzt doch keine Ruhe gelassen.

Manchmal hilft auch debuggen ohne dass man ganz genau versteht was 
abläuft!

Habe den Fehler gefunden. Es ist ein Problem mit der Memory Allocierung.
Durch die Verwendung eines sehr grossem RAM Buffers wurde der 
Stackbereich
durch neu hinzugekommende Variablen "angekratzt". Das hat also nur
zufälligerweise was mit der sprintf Funktion zu tun.

Danke nochmals für die anregende Hilfe.

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe scheinbar das gleiche Problem. Wenn ich zusätzliche Variablen 
in meinem Projekt definiere, dann funktioniert die sprintf-Funktion 
nicht mehr, d.h. sie schreibt in einen anderen RAM-Bereich und 
überschreibt somit Variablen. Ohne die zusätzlichen Variablen 
funktioniert es jedoch tadellos.

Wie kann ich dieses Problem umgehen, bzw. welche Lösungsmöglichkeiten 
gibt es?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab nun die große Funktion mit den vielen Variablen in zwei Teile 
geteilt. Dadurch ist das Problem verschwunden.

Grüße Hans

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.