Chris72622:
Wenn ich dann aber alle weiteren eintreffenden Zeichen ignoriere, kommt ja gar keine Auswerung mehr zustande.
Wieso nicht? Angeblich wird doch jede Sendung mit "#" beendet?
Dann muss ja irgendwann nach weiteren eintreffenden Zeichen auch wieder "#" kommen?
Wenn das der Fall ist, wird der Eingangspuffer gelöscht und resettet.
Und was danach kommt, wird wieder einwandfrei empfangen.
Chris72622:
Angenommen ich werte so wie von Dir vorgeschlagen aus und es kommt eine gültige Zeichenkette reingeflattert, so löst diese durchs abschließende # die entspr. Funktion aus.
Wenn von nun an aber nur noch wirres Zeug reinkommt, wie soll ich dann auf die nächste gültige Zeichenkette reagieren können?
Hm, also das Gerät sendet jetzt plötzlich "wirres Zeug" anstatt Daten, Zeilenende-Zeichen und "#" gemäß Sendeprotokoll?
Oder hast Du so eine gestörte Datenleitung, so dass auf der Leitung nicht nur Daten gemäß Sendeprotokoll laufen, sondern auch "Datenmüll" durch Störungen entstehen kann?
In dem Fall mußt Du zusätzlich in der Empfangsroutine auch noch eine Timeout-Funktion integrieren, also wenn das "#" als abschließende Zeichen nicht innerhalb einer vernünftigen Zeit empfangen wird, dann wird nach dem Timeout eben so getan, als wäre es empfangen worden. Und der Puffer geleert und neu angefangen Zeichen zu zählen.
Mit Datenverlusten auf der Leitung mußt Du immer dann rechnen, wenn Deine Leitungen nicht störungsfrei verkabelt sind.
Wenn Du zum Empfangen erwartest:
RTE 1\r\n\r\n#
und das kommt stattdessen an:
RasdfawerTadasfgfghE234523451fgh\rxcvb\nasdf\retret\nasdfasdf!
dann steckt das zwar auch irgendwo "RTE 1\r\n\r\n" drin, aber es gibt keine Auswerteroutine der Welt, die Dir das da genau so wieder herauszieht, bei solchen wirren Zeichen auf der Leitung.
Wenn Du kein mit CRC-Summen gesichertes Datenprotokoll mit Datenblöcken fester Länge hast, dann kannst Du bei Störungen eintreffende Zeichen nur verwerfen, wenn sie nicht gültig ausgewertet werden können. Und die einzige Möglichkeit zur Störungserkennung, wenn das Ende-Zeichen "#" nicht korrekt über die Leitung kommt, ist ein Timeout. D.h. wenn statt:
RTE 1\r\n\r\n#
das falsche Zeilenende-Zeichen ankommt, z.B.
RTE 1\r\n\r\n!
dann würde ein nachfolgendes Timeout dem Empfangspuffer zurücksetzen. Genauso wenn das Ende-Zeichen "#" überhaupt nicht ankommt:
RTE 1\r\n\r\n
dann würde ein nachfolgendes Timeout den Empfangspuffer ebenfalls zurücksetzen.
Und wenn überhaupt keine Timeouts auftreten und auch die richtigen Zeilenende-Zeichen nicht im Datenstrom vorkommen, dann bleibt empfangener Datenmüll bis zur Puffergröße im Eingangspuffer und weiterer eintreffender Datenmüll wird verworfen. Solange bis entweder wieder ein "#" im Datenstrom vorkommt. Oder bis ein Sende-Timeout auf der Leitung auftritt und keine Zeichen mehr ankommen.