Go Down

Topic: Sämtliche Zeichen eines Arrays um eine Stelle verschieben (Read 3 times) previous topic - next topic

jurs


Das mit den 100ms im letzten Codefetzen war nur fürs Debugging.


Die 100 ms explizites delay meine ich gar nicht.

Aber was ist mit dem quasi "eingebauten delay" beim Aufrunf von findUntil?
Die findUntil-Funktion macht doch "busy waiting" und verzögert die weitere Programmausführung, während es damit beschäftigt ist, auf das Eintreten der Abbruchbedingung zu warten.

Ich habe die Funktion gerade mal getestet, eine Zeile wie
x=Serial.findUntil("Z 3 0 1","\r");
dauert in der Ausführung zwar im Extremfall nicht unendlich lange (entsprechend der Dokumentation auf den Arduino-Seiten), sondern "nur" bis zu 1 Sekunde (=1000 ms), offenbar gibt es ein nicht dokumentiertes Timeout.

Stört das weiter nicht, wenn Deine Programmausführung für anderen Code bis zu einer Sekunde aussetzt?

Denn die Funktion findUntil blockiert doch die Programmausführung, und zwar bis
- entweder der Suchstring gefunden wird (z.B. "Z 3 0 1")
- oder der terminierende String gefunden wird (z.B. "\r")
- oder das Timeout von einer Sekunde abgelaufen ist

Das war meine Frage, ob diese blockierende Eigenschaft der Funktion findUntil für Dein Programm unbedenklich ist?

Z.B. weil (was Du nicht geschrieben hast) an der seriellen Schnittstelle zwischen den Kommandos, die Du abgreifen möchtest, sowieso immer laufend "\r" gesendet wird und im Eingangspuffer landet, bei dessen Empfang Deine findUntil-Aufrufe ja jedesmal abbrechen?





Chris72622

#21
Jan 16, 2013, 01:07 pm Last Edit: Jan 16, 2013, 06:23 pm by Chris72622 Reason: 1
Ich habe das Timeout auf 0 gesetzt und frag 100ms nach Knopfdruck ab.

Dokumentiert ist es hier:

http://arduino.cc/en/Serial/SetTimeout

Das passt in meinem Fall wirklich super. :)

Es lassen sich bei mehreren seriellen Anschlüssen sogar unterschiedliche Timeouts (jedezeit neu) setzen.

Gruß Chris

Go Up