Как выбрать правильную контрольную сумму для простой программы на C ++ и как ее реализовать?

Я очень плохо знаком с контрольными суммами и довольно плохо знаком с программированием. У меня есть довольно простая программа на C ++ (измерение psi), которую я перенесу на плату Arduino. Будет ли crc16 нормально, или я должен пойти с crc32, или это будет излишним?

-2

Решение

Возможный способ проверить правильность передачи исполняемого файла на вашу плату Arduino — использовать простую контрольную сумму, например md5, или даже что-то еще проще, например, какая-то грубая хеш-функция, вычисляющая 16-битный хеш. Смотрите, например этот ответ для вдохновения.

0

Другие решения

Контрольные суммы возникают в контексте ненадежных каналов связи. Канал связи — это абстракция; биты идут на одном конце и выходят на другом конце. ненадежный Канал просто означает, что выходящие биты не совпадают с входящими.

Теперь очевидно, что самый экстремальный ненадежный канал имеет случайные биты. Это неприменимо, поэтому мы сосредоточимся на каналах, где вход и выход коррелированы.

Тем не менее, у нас есть много разных моделей коррупции. Одна общая модель — каждый бит P% может потерпеть неудачу. Другая распространенная модель считает, что битовые ошибки обычно происходят в пакетах. Каждый бит с вероятностью P% может начать набор ошибок длины N, в которых каждый бит с вероятностью 50% ошибочен. В зависимости от вашей проблемы существует еще несколько моделей — более продвинутые модели также учитывают вероятность того, что биты будут полностью потеряны.

Правильная контрольная сумма имеет очень, очень высокую вероятность обнаружения типа ошибки, предсказанной моделью, но может не сработать для других типов ошибок.

Например, я думаю, что при уровне IP-адресов в Интернете наиболее распространенной ошибкой является пропадание всего IP-пакета. Вот почему TCP использует порядковые номера для обнаружения этой конкретной ошибки.

0