printf, Zeitverzögerung

Gast #1203313
Hallo,

ich habe ein System, das Daten über eine serielle Schnittstelle an einen 
uC schickt, der verarbeitet diese, und schickt das Ergebnis wieder über 
den UART zum PC (Terminal).
Was ich nicht verstehe:
Und zwar lege ich meine zu verschickenden Daten in eine Buffer, und dann 
versende ich diese zum uC, und danach mach ich erst eine paar Ausgaben 
am Bildschirm, jedoch ist es so, dass wenn ich die printf Ausgaben 
herausnehme mein ganzen System erheblich schneller ist. Weiß jemand 
woran das liegt? Hier noch ein kleiner Ausschnitt meines Codes:

app->txBuf[app->txId++] = (MyByte8T)c;
SendBuffer();
printf ("\nPing-Funktion gewaehlt!!!\n");
printf("Zu Uebertragender Wert[Buffer Inhalt]: %u 
\n",app->txBuf[app->txId]);
printf("Wert Tickcounter beim Senden: %u \n",time_send);
printf("Wert Tickcounter beim Senden für us: %u \n",time_send2);
app->mode = 0;
app->txId = 0;

Wie man sehen kann, rufe ich vor dem printf erst die SendeBuffer - 
Funktion auf. Ich verstehe also nicht, warum das printf überhaupts 
Auswirkungen hat?!?!
Ein printf ist auch auf einem PC nicht unbedingt schnell.

> Aber, ich muss unbedingt ein paar Ausgaben machen, wie kann ich das denn
> sonst machen?

Weniger ausgeben.

(Im Ernst)

Da muss nicht unbedingt stehen

Ping-Funktion gewaehlt!!!
Zu Uebertragender Wert[Buffer Inhalt]: 12
Wert Tickcounter beim Senden: 1045
Wert Tickcounter beim Senden für us: 857

Dieselbe Information kannst du auch kürzer kriegen. Es reicht ja wohl 
völlig, wenn dort steht

Ping - Tx: 12 - T1: 1045 - T2: 857

und schon läuft dein PC-Programm schneller (unter anderem deswegen, weil 
es nicht soviel scrollen muss)
Gast
@Karl Heinz

Ich weiß nicht genau was du damit meinst, wohin die Ausgabe des printf 
geht.
Aber die Ausgabe erfolgt auch wieder auf dem Terminal, wo die Eingabe 
auch getätigt worden ist.
Cherry wrote:
> @Karl Heinz
>
> Ich weiß nicht genau was du damit meinst, wohin die Ausgabe des printf
> geht.
> Aber die Ausgabe erfolgt auch wieder auf dem Terminal, wo die Eingabe
> auch getätigt worden ist.

Hab überlesen, dass dein printf wohl im PC-Programm gemacht werden.
Siehe nachfolgende Antwort.
Gast
@ Karl Heinz

Ja ich weiß, ich habe diese ganzen Ausgaben schon gelöscht und kompakter 
formuliert. Jedoch ist eigentlich ein printf (mit ca. 1ms) schon 
zulange, da ich eine exakte Zeitmessung in us brauche, und ich mit so 
einem verfälschten Ergebnis nichts anfangen kann.
Cherry wrote:

> zulange, da ich eine exakte Zeitmessung in us brauche, und ich mit so
> einem verfälschten Ergebnis nichts anfangen kann.


Dann darfst du eben während die Zeitmessung läuft, gar nichts ausgeben, 
sondern erst danach.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.