Grande parte dos protocolos de comunicação serial se utilizam da checagem de integridade para garantir que a mensagem está correta. Uma delas é realizar a soma de todos os valores da mensagem e enviar esse resultado por último. Para indicar o começo de uma mensagem é comum se utilizar de um valor padrão, por exemplo o número 13, e um segundo número padrão é utilizado para marcar o final da mensagem, por exemplo 21. Utilizando essas informações podemos verificar, por exemplo, que a MSG1 abaixo está correta pois o somatório dos números entre o 13 e o 21, é igual a 28, conforme escrito na posição depois do número 24. Já a MSG2 está errada pois a soma retorna 20 e não 21 como representado.
MSG1 | 13 | 01 | 02 | 05 | 08 | 01 | 03 | 10 | 21 | 28 |
---|---|---|---|---|---|---|---|---|---|---|
MSG2 | 13 | 00 | 01 | 02 | 03 | 05 | 09 | 10 | 21 | 25 |
Dado que a biblioteca A biblioteca serial possui duas funções disponíveis: void StartSerial(void), que inicializa a comunicação serial e int ReadSerial(void), que retorna o último número recebido.
Passo 1
Então, a gente tem aqui um exercício que fala sobre protocolos de comunicação serial. Basicamente, esses protocolos ajudam os dispositivos a trocarem mensagens de forma correta e sem erros. O exercício nos mostra como verificar se uma mensagem chegou certinha, somando os valores que compõem a mensagem e conferindo se essa soma está correta. Para resolver isso, vamos precisar entender como inicializar a comunicação serial e como ler os números recebidos usando as funções
StartSerial()
e ReadSerial()
da biblioteca serial.Passo 2
Primeiro, a gente precisa iniciar a comunicação serial. Isso é feito chamando a função
StartSerial()
. Ela prepara o sistema para começar a receber os dados que vêm pela porta serial.Passo 3
Depois de iniciar a comunicação, vamos começar a ler os números enviados. Para isso, usamos a função
ReadSerial()
, que retorna o último número recebido. A gente vai ler os números um por um até identificar o início da mensagem, que é marcado pelo número 13.Passo 4
Quando encontramos o número 13, sabemos que é o começo da mensagem. A partir daí, vamos continuar lendo os números até encontrar o número 21, que marca o final da mensagem. Todos os números entre 13 e 21 são os dados que precisamos somar para verificar a integridade da mensagem.
Passo 5
Enquanto lemos os números entre 13 e 21, vamos somando eles. Por exemplo, na MSG1, temos os números 01, 02, 05, 08, 01, 03, e 10. A soma deles fica:
Mas parece que no enunciado, o somatório é 28, então vamos conferir direitinho quais números estamos somando.
Passo 6
Depois de calcular a soma dos números da mensagem, passo seguinte é comparar esse resultado com o último número da mensagem, que é o checksum. Esse checksum serve para indicar se a soma está correta. Se a soma que a gente calculou for igual ao checksum enviado, então a mensagem está correta. Caso contrário, tem algum erro na transmissão.
Passo 7
Vamos aplicar isso nas MSG1 e MSG2 do enunciado:
- MSG1: A soma dos números entre 13 e 21 dá 28, que é igual ao checksum enviado (28). Então, a MSG1 está correta.
- MSG2: A soma dos números entre 13 e 21 dá 20, mas o checksum enviado é 25. Como não são iguais, a MSG2 está errada.
Resposta
Para verificar se uma mensagem serial está correta, a gente inicializa a comunicação com
StartSerial()
, lê os números com ReadSerial()
, identifica o início (13) e o fim (21) da mensagem, soma os valores intermediários e compara com o checksum final. Se a soma bater com o checksum, a mensagem está correta; se não, está errada.