mikrocontroller.net

Forum: PC-Programmierung Wie printf() kapseln


Autor: Hugo Bossard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Zu Testzwecken compiliere ich meinen Code für den V850 auf dem PC unter
GCC. Da ich auf dem PC mittels printf() schön in die Konsole schreiben
kann, auf dem Target jedoch auf ein Terminal, dachte ich, eine Funktion
zu basteln, welche, falls auf dem PC compiliert ein printf() aufruft,
falls auf dem Target, die entsprechende Sequenz für das Terminal:

void TraceFunkt(???)
{
#ifdef PC
  printf(Arg1, Arg2, ???);                    // Z1
#else
  sprintf(G_UartStr, Arg1, Arg2, ???);        // Z2
  UARTPrintF(G_UartStr);                      // Z3
#endif
}

Ich weiss aber nicht, wie ich das mit den Argumenten machen soll. Weiss
jemand Rat oder eine bessere Lösung?
Oder wie könnte ich die Zeile Z1 bzw. Z2/Z3 in ein Macro packen?

Bin dankbar für Hinweise.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Stichwort im Netz lautet
'variadische Funktionen'

Ich versuch mich mal daran. Nicht schlagen wenns
so nicht geht :-)

void TraceFunkt( const char* Fmt, ... )
{
  va_list ap;

  va_start( ap, Fmt );

#ifdef PC
  vprintf( Fmt, ap );
#else
  vsprintf( G_UartStr, Fmt, ap );
  UARTPrintfF( G_UartStr );
#endif

  va_end( ap );
}


Über die notwendigen Includes bin ich mir nicht im klaren.
Ich denke aber, stdarg.h sollte ausreichen.

Autor: Hugo Bossard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke! Funktioniert bestens, Include von stdarg.h genügt.

:-)

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pff. Glück gehabt. :-)
Ich hab solche Dinger schon ewig nicht mehr benutzt.

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.