www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik printf Ausgabe beim C167cr über RS232


Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe ein Phytec Kitcon 167., mit einem Infinion C167cr.
Ich benutze den Taskin Compiler V8.0r2.

Ich möchte einen text über printf über meine Serielle Schnittstelle 
ausgeben.
Nach Recherche im inet habe ich herausgefunden, das printf auf die 
Funktion _iowrite(...) zugreift, diese wiederum greift auf putch(...) 
zu.

Ich habe jetzt die putch(...) so abgeändert, das mir der Text über RS232 
ausgiebt.

Rufe ich die _iowrite(...) direkt auf, so wird der übergebene Text 
ausgegeben.

Aber mein printf greift überhaupt nicht auf _iowrite(...), putch(...) 
oder size_t  _write  (...) zu.

Auf was greift jetzt printf wirklich zu?

Autor: MSc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

auf die serielle Schnittstelle.

Grüße,

Michael

Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein greift sie nicht,
das ist ja das Problem.

Autor: MSc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei einem µC ist die Standardschnittstelle die serielle.

Kommt an der seriellen gar nichts raus oder nur unlesbarer schrott.

wenn schrott, ist die Schnittstelle nicht richtig konfiguriert.


Erzähl mal dein Problem.


Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Compiler ?

Üblicherweise ist es putchar. Kannst du dir aber auch selbst schreiben.
void putchar (char c)    {
  while (!TI);                // Transmitter ready/busy ?
  TI = 0;                     // TI Flag löschen
  SBUF = c;                   // Ausgabe an UART
}

printf übergibt die Zeichen somit auf deine eigene "putchar" Funktion.

Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit _iowrite(...) oder putch(...) kommt das richtige an.
Bei printf passiert einfach garnichts.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Compiler ?

Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tasking V8.0r2

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kenne ich leider nicht, also Handbuch lesen.

Beim Keil und SDCC ist es putchar. Kann mir nicht vorstellen das Tasking 
das anders macht.

Sorry, kann dir nicht helfen.

Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das Handbuch gelesen. Das steht zwar drin was die ganzen Funktionen 
mach, aber nicht wie.

Da steht:

printf
#include <stdio.h>
int printf( const char *format, ... );
Performs a formatted write to the standard output stream.
See also "_write()".
Returns the number of characters written to the output stream.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du mal in dem stdio.h file suchst, bei mir steht so etwas:

extern char *gets(char *);
extern char getchar(void);
extern void putchar(char);

Poste mal das File.

Autor: Sebastian Ullrich (sebi85)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Siehe Anhang.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define putchar(x)      putc(x,stdout)

Sieht für mich nicht anders aus, es gibt also putchar und getchar.

Was sagt das Handbuch

Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
putchar
#include <stdio.h>
int putchar( int c );
Puts one character onto standard output.
See also "_write()".
Returns the character written or EOF on error.


putc
#include <stdio.h>
int putc( int c, FILE *stream );
Puts one character onto the given stream.
See also "_write()".
Returns EOF on error.

Autor: Joe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, mitten im Schreiben abgerutscht. Die Frage lautet was sagt das 
Handbuch zu printf ??

Wie wäre es wenn du mein kleines "putchar" Beispiel einfach 
implementierst und probierst.

Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf
#include <stdio.h>
int printf( const char *format, ... );
Performs a formatted write to the standard output stream.
See also "_write()".
Returns the number of characters written to the output stream.


Ich werde es mal implementieren.

Autor: Marko B. (glagnar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum benutzt Du nicht einfach sprintf?

Autor: Sebastian Ullrich (sebi85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beispiel ging nicht.

sprintf???

Geht es damit einfacher.

Autor: Marko B. (glagnar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Mit sprintf in einen Buffer schreiben.
2. String mit der entsprechenden Funktion auf UART/LCD/etc. ausgeben.

Autor: Max Murks (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
printf schreibt immer auf Standard-IO aus. und das ist beim C167cr die 
erste serielle Schnittstelle(nicht die zweite!).

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.