das wird so nicht funktionieren, da ja die Datenbytes alles Mögliche enthalten können, unter Anderem auch den Binärwert von s und p.
Das wird nur gehen wenn Du nen Ringpuffer verwendest, der mindestens 2mal die Paketlänge lang ist und dann quasi ne maske darüber schiebst.
Sprich erst schiebst Du "snp" über den puffer, wenn da eine Übereinstimmung ist wertest Du das Type-byte aus, ob Du dieses Paket überhaupt haben willst, dann liest Du die Paketlänge aus und hüpfst die angegebene Paketlänge über den Buffer und bildest die 2 angehängten checksummenbytes aus um das Paket auf Richtigkeit zu prüfen.
Dann und nur dann ist das ne gültige Message.
schau Dir mal Overlayvariablen und Array an.
du schreibst dann per urxc in den array und zählst den pointer hoch
also pseudocode
dim puffer(40) as byte
dim pufferstring as string*39 at puffer overlay
:uartempfang
incr pufferpointer
puffer(pointer)=udr
if pufferpointer>39 then pufferpinter=0
return
:auswertung
For Zaehler = 1 To 40
Zeichenpointer=Zaehler
If Puffer(zeichenpointer) = "s" Then
Incr Zeichenpointer
If Zeichenpointer > 40 Then
Zeichenpointer = Zaehler - 40
endif
If Puffer(zeichenpointer) = "n" Then
Incr Zeichenpointer
If Zeichenpointer > 40 Then
Zeichenpointer = Zeichenpointer - 40
End If
If Puffer(zeichenpointer) = "p" Then
Snp_erkannt_flag = Zeichenpointer
Else
Snp_erkannt_flag = 0
End If
else
Snp_erkannt_flag = 0
End If
else
Snp_erkannt_flag = 0
End If
Next
If Snp_erkannt_flag > 0 Then
Gosub Weiter_zur_auswertung
End If
return
irgendwie so halt
return
Lesezeichen