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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von pc (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

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]
  • [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.