Forum: Mikrocontroller und Digitale Elektronik Aufhängen bei printf ohne IDE


von pc (Gast)


Lesenswert?

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?

von Dr. Sommer (Gast)


Lesenswert?

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?

von pc (Gast)


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

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?

von Christopher J. (christopher_j23)


Lesenswert?

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

von pc (Gast)


Lesenswert?

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..

von Christopher J. (christopher_j23)


Lesenswert?

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
Noch kein Account? Hier anmelden.