... Posso immaginare, anche se con bassa probabilità, che il mio messaggio possa contenere i valori "10 e 13" uno dopo l'altro quando non sono i byte di stop.
Quando si progetta il formato di un pacchetto di dati seriali, si deve considerare una situazione in cui una porzione di dati è uguale alla sequenza finale. Un'altra cosa da considerare è che qualsiasi personaggio può essere danneggiato o perso durante la trasmissione. Un carattere di inizio, un carattere di arresto, un byte di payload dei dati, un checksum o un byte CRC, un byte di correzione dell'errore forward non sono immuni alla corruzione. Il meccanismo di framing deve essere in grado di rilevare quando un pacchetto contiene dati corrotti.
Esistono diversi modi per affrontare tutto questo.
Sto assumendo che i pacchetti siano inquadrati solo con i byte seriali. Le linee di handshake non vengono utilizzate per l'inquadramento. I ritardi non vengono utilizzati per l'inquadramento.
Invia lunghezza pacchetto
Invia la lunghezza del pacchetto all'inizio, anziché [o in aggiunta a] il carattere finale alla fine.
pro: il payload viene inviato in un efficiente formato binario.
contro: è necessario conoscere la lunghezza del pacchetto all'inizio della trasmissione.
Sfuggire ai personaggi speciali
Sfuggire ai caratteri speciali quando si inviano i dati del payload. Questo è già spiegato in una risposta precedente .
pro: il mittente non deve conoscere la lunghezza del pacchetto all'inizio della trasmissione.
contro: Leggermente meno efficiente, a seconda di quanti byte di payload devono essere evitati.
Dati del payload codificati in modo tale che non possano contenere caratteri di avvio e arresto
Il payload del pacchetto è codificato in modo tale da non poter contenere i caratteri di inizio o fine. Di solito, questo viene fatto inviando numeri come loro rappresentazione ASCII o Hex-ASCII.
pro: leggibile dall'uomo con i comuni programmi terminali. Non è necessario che il codice gestisca l'escaping. Non è necessario conoscere la lunghezza del pacchetto all'inizio della trasmissione
contro: efficienza inferiore. Per un byte di dati del payload, vengono inviati diversi byte.