Hallo, ich nutze die Funktion printf() in meinem STM32F0-Projekt in IAR, um mir im Terminal I/O-Fenster Debug-Ausgaben anzeigen zu lassen. Lasse ich den Code in der IDE (im Debug-Modus) laufen, funktioniert alles. Schließe ich IAR und resette den Controller, damit er von selbst anläuft, bleibt der µC bei der ersten printf() hängen (ermittelt per LEDs, alles vor der printf läuft). Weiß einer woran es liegen kann? Wartet printf auf ein ACK?
pc schrieb: > Weiß einer woran es liegen kann? Wartet printf auf ein ACK? printf gibt die Daten nur an eine darunterliegende "write" Funktion weiter. Was die macht, hängt vom Betriebssystem und der C-Library ab. Also, wie verarbeitet dein OS/libc die Daten? Schickt es sie per UART? USB? SWO? ...? Wartet es auf ein ACK?
Dr. Sommer schrieb: > Also, wie verarbeitet dein OS/libc die Daten? Schickt es sie per UART? > USB? SWO? ...? Wartet es auf ein ACK? Es handelt sich um ein STM32F0 Discovery-Board mit ST-Link. Das Ganze ist per USB angeschlossen. Ich würde auf SWO tippen.
pc schrieb: > Ich würde auf SWO tippen. Du weißt also nicht genau was du da für eine Umleitung eingebaut hast? Weißt du wenigstens wie du die Texte am PC abrufst oder erscheinen die irgendwie auf dem Bildschirm?
pc schrieb: > Ich würde auf SWO tippen. Ich würde eher auf Semihosting tippen, weil das bekanntlich zu Problemen führt, wenn denn kein Debugger angeschlossen ist
Christopher J. schrieb: > Ich würde eher auf Semihosting tippen, weil das bekanntlich zu Problemen > führt, wenn denn kein Debugger angeschlossen ist Genau, in IAR ist es Semihosting. Dr. Sommer schrieb: > Du weißt also nicht genau was du da für eine Umleitung eingebaut hast? > Weißt du wenigstens wie du die Texte am PC abrufst oder erscheinen die > irgendwie auf dem Bildschirm? Ich habe Semihosting in IAR aktiviert. Man könnte jetzt natürlich alle printf rausschmeißen, aber die Datei ist eine API von einem Hersteller. Leider ohne irgendwelche Präprozessor-ifs, um die print-Ausgabe nicht mitzukompillieren. Bei einer neuen Version müsste man das Ganze ja wieder machen..
pc schrieb: > Man könnte jetzt natürlich alle printf rausschmeißen Du könntest auch einfach Semihosting deaktivieren, den Rat von Dr. Sommer befolgen und deine eigene write()-Funktion implementieren, so dass printf dann z.B. über den UART sendet.
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.