Diese ganze Auswertung ist ziemlicher Müll, weil der Empfänger nie
wieder synchronisiert, wenn er einmal ausser Tritt gekommen ist (zb.
weil der Sender mal 5 Bytes statt 4 gesendet hat)
Frag dich einfach mal (bzw. spiels in Gedanken durch) was passiert wenn
der Sender
&H00 &H80 &H10 &H20 &H01 &H40 &H10 &H20
sendet (zb. weil dein Mega mitten in eine laufende Übertragung
einsteigt). Wie kann er aus dem Datenstrom den gültigen Frame &H10 &H20
&H01 &H40 rausfiltern und darauf reagieren?
Die Antwort darauf ist nicht: indem er darauf wartet, dass jeweils 4
Bytes zusammen gekommen sind. Denn dann würde deine Erkennung die ersten
4 Bytes
&H00 &H80 &H10 &H20
untersuchen, feststellen dass das kein gültiger Frame war und auf die
nächsten 4 Bytes warten
&H01 &H40 &H10 &H20
ebenfalls kein gültiger Frame. Und so gehts dann weiter (Genau das was
ich oben sagte: Dein Empfänger synchronisiert sich nicht mehr, wenn er
einmal ausser Tritt gekommen ist)
Funktionieren tut das nur, indem man nach jedem empfangenen Byte die 4
zuletzt Empfangenen untersucht (wenn denn schon 4 Empfangen wurden) und
nachsieht ob das ein gültiger Frame war.
Das erste Byte kommt rein: &H00
&H00 (noch keine 4 vorrätig, daher keine Analyse möglich)
Das nächste kommt rein: &H80
&H00 &H80 (erst 2, 4 sind aber notwendig)
Das nächste: &H10
&H00 &H80 &H10 (erst 3, immer noch keine 4)
Nächster Empfang: &H20
&H00 &H80 &H10 &H20 jetzt sinds 4, aber das ist kein gültiger Frame
-> keine Aktion
Nächster Empfang: &H01
Das erste zwischengespeicherte Byte wird verworfen, alle anderen rücken
nach
&H80 &H10 &H20 &H01 immer noch kein gültiger Frame
Nächster Empfang: &H40
&H10 &H20 &H01 &H40 holla, diese 4 Bytes sind ein gültiger Frame
-> Auswerten und den Empfangsbuffer löschen
Nächster Empfang: &H10
&H10 noch keine 4 Bytes empfangen
Nächster Empfang: &H20
&H10 &H20
....
Und wozu das Frame-Array gut sein soll, ist mir auch nicht wirklich
klar.