Forum: Mikrocontroller und Digitale Elektronik printf, Zeitverzögerung


von Cherry (Gast)


Lesenswert?

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?!?!

von Oha (Gast)


Lesenswert?

Ein printf() ist ein rRiesenklotz am Bein des Controllers. In die Tonne 
damit.

von Cherry (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

Wohin geht denn die Ausgabe des printf?

von Karl H. (kbuchegg)


Lesenswert?

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)

von Cherry (Gast)


Lesenswert?

@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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Cherry (Gast)


Lesenswert?

@ 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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Cherry (Gast)


Lesenswert?

ok, danke dir.... mal schauen was ich noch machen kann!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.