vittorio68:
Avevo pensato a due byte per ridurre la possibilità che la combinazione scelta come start potesse presentarsi all'interno del pacchetto. In effetti, lo start del pacchetto, ci serve per avviare l'automa a stati che deve interpretare il pacchetto. Se il valore di start si presenta all'interno del pacchetto, l'automa comincia ad interpretare i bytes in arrivo attribuendo loro un significato diverso. Pertanto, non capirà che un certo bytes ricevuto è il cheksum del pacchetto. In effetti però mi hai fatto riflettere sul fatto che non scarterà il pacchetto per checksum errato ma piuttosto per timeout.Non so se sono stato chiaro... ma ti chiedo comunque: che ne pensi?
Se lo slave sta ricevendo un pacchetto, dati non deve interpretare i byte contenuti in esso. Lui deve solo riconoscere:
- il byte di start, ed iniziare a leggere;
- il byte contenente il numero di byte ulteriori che deve ricevere, e questo valore non può essere confuso con altri perché è in una posizione ben precisa, e poi i byte di stop e di checksum, che arrivano in determinate posizioni (dipendenti da quanti byte sono stati trasmessi).
Qui mi chiedo: è possibile che uno slave risponda tardi?
E' possibile, pensa se ad esempio va in crash per un errore logico del programma oppure perché gli è stato chiesto un accesso ad un sensore, immaginiamo, e questo sta impiegando più tempo perché anch'esso è difettoso.
Quindi è una catena da verifica con timeout in ogni operazione critica, come hai capito anche tu.