www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32 printf Umleitung


Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite mit der Keil-IDE und einem STM32.

Ziel ist es, Daten von einer seriellen Schnittstelle (UART) zu 
empfangen, zu analysieren und zu verarbeiten und bedingungsabhängig auf 
einer anderen auszugeben. Es geht um 3 Schnittstellen, die alle, Source 
und Senke der Information sein können.

In den Templates, die zum Keil mitkommen, ist die printf-Ausgabe per 
#define festgeschrieben, was mir ja zur Laufzeit nicht weiterhilft.

Wie löst man dieses Problem nun elegant?
U.B. printf mit 2. Parameter oder
vorher globale Variable umsetzen?

Mit der retarget.c komme ich nicht klar, d.h. ich verstehe nicht, wie 
ich das damit lösen kann.

Also, was ist Euer Vorschlag?

Viel Grüße

Jürgen

Autor: Martin Thomas (mthomas) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Soweit erinnert (nutze fast nur anderen Compiler/libc, ist aber überall 
ähnlich), wird den low-level-Funktionen (sys_write, sys_read,...) ein 
file-handle mitgegeben. printf nutzt STDOUT und für die anderen 
Schnittstellen führt man selbst File-Handles  ein, nutzt fprintf/fgetc 
etc. und macht in den low-level-Funktionen (sys_write, sys_read...) 
Fallunterscheidungen oder - eleganter - mittels eines Arrays aus 
structs, in denen Funktionspointer für die jeweilige 
schnittstellenspezifischen Funktionen gespeichert sind.

Autor: A. B. (funky)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hatte das gleiche Problem.(benutze einen STM32F215)

Hier mal eien retarget Variante die bei mir funktioniert.
printf braucht um die 500Bytes, sollte ja aber kein Problem sein

Ich weiss nicht, ob das ganze noch vom Debugger abhängt?
Ich benutze einen J-Link Adapter per SW und nicht JTAG.
Zusätzlich habe ich das ganze noch so konfiguriert:
http://www.keil.com/support/man/docs/jlink/jLink_S...

Ich kann nun per printf Texte in das Debugfenster schreiben.

Was ich noch nicht so ganz verstanden habe:
Laut 
http://infocenter.arm.com/help/index.jsp?topic=/co... 
ist printf() nur abhängig von fputc() and ferror().

Bei mir wurden aber immer noch die file Funktionen wie _sys_open() 
aufgerufen. evtl. muss man da noch irgendwie den StdOut umkonfigurieren?
Mit der retarget Version klappt es jetzt aber, da die _sys-Funktionen 
dort ersetzt sind.

Da waren vorher auch noch Funktionen drinne, um printf für ein LCD 
benutzen zu können. Ich habe das aber gelöscht, da nicht benötigt. Wer 
weiteres wissen will, kann sich auch das Beispiel in 
"Keil\ARM\Boards\Keil\MCBSTM32E\framebuffer" zu gemüte führen


Evtl. hilft das ja jemanden

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.