www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik printf, Zeitverzögerung


Autor: Cherry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?!?!

Autor: Oha (Gast)
Datum:

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

Autor: Cherry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber, ich muss unbedingt ein paar Ausgaben machen, wie kann ich das denn 
sonst machen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wohin geht denn die Ausgabe des printf?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Cherry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Cherry (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Cherry (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok, danke dir.... mal schauen was ich noch machen kann!

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.