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.
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?
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
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
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
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.
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?
Ich hab nun die große Funktion mit den vielen Variablen in zwei Teile geteilt. Dadurch ist das Problem verschwunden. Grüße Hans
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.