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:
01 + 02 + 05 + 08 + 01 + 03 + 10 = 30
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.

Exercícios relacionados