Hallo zusammen, die sprintf Funktion geht bei mir nur mit Integer, jedoch sobal dich einen float Wert in einen String einfügen will springt der Arm immer in den DAbortHandler. Gelinkt sind lc lgcc lm. Hab ich noch was vergessen? gcc Version ist 4.6.0 vielleicht kann mir jemand nen Tip geben. Grus Stefan
Solange nichts ausgegeben wird, braucht es auch keine angepasste syscall.c. sprintf benötigt sehr viel Stack und Programmspeicher, vielleicht gibt es da Probleme. Oliver
Zumindest bei älteren Versionen der newlib (den ganz aktuellen Quellcode noch nicht angeschaut) wird von der hinter sprintf arbeitenden libc-Funktion Speicher vom Heap angefordert. Wenn dem immer noch so ist: ist der sbrk-syscall erforderlich, die darin genutzte heap-Startadresse korrekt vorzugeben und es muss ab dieser Adresse auch Speicherplatz auf dem Heap verfügbar sein.
Hallo Stefan, >vielleicht kann mir jemand nen Tip geben. Ja könnte ich versuchen, aber nur wenn ich weis was für eine CPU Du benutzt. Ich habe vor kurzen schon so eine Anfrage bekommen, und ich hatte keine Probleme, bei mir ging alles. Bis ich auch eine ARM7 CPU zum testen verwendet habe... Ich will damit sagen, das es bei meinen Cortex-M3 Beispielen keine Probleme gibt, und die ARM7 hier Probleme machen. Bitte, bitte, bitte, gibt doch bei Problembeschreibungen mehr Infos wie z.B. welche CPU benutzt wird mit an. Hier nun ein Versuch der Lösung. 1. syscalls.c gibt es hier: http://www.yagarto.de/download/yagarto/syscalls.c 2. Im Linker Script muss das Symbol "end" an der richtigen Stelle eingefügt werden. 3. Ich habe die Info bekommen das der Stack 8 Byte aligned sein muss. Viele Grüße, Michael PS: Es wurden ca. 2K vom Heap angefordert.
Also der uC ist ein ARM7 von NXP und zwar genau der LPC2148. Habe eigentlich den Beispielcode von der yagarto Seite genommen und dort die zusätzlichen Librarys eingebunden, und die caddr_t _sbrk_r (struct _reent *r, int incr) aus der syscalls.c in mein Programm mit eingefügt. Das programm ist eigentlich eine leere main Funktion in der nur sprintf aufgerufen wird. Ach ja das Symbol end ist im Linkerskript drinnen. werde morgen mal probieren die syscalls.c komplett in das Program so einzubinden und mal schaun ob es damit geht.
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.