(Borland C++Builder 6) [Статья 8] (TxRxV1)(CRC)(Контрольная сумма)(Обмен)(C/C++)

| 10.02.2016

(Borland C++Builder 6) [Статья 8] (TxRxV1)(CRC)(Контрольная сумма)(Обмен)(C/C++)

 

Описание :
У нас есть задача узкая задача: обезопасить передаваемые данные, причем ещё уменьшим решаемую задачу, а именно пусть наши сообщения не могут иметь больше 4-ех байт данных и первым байтом идет байт в котором указано число байт в сообщении, таким образом Байт размера сообщения + один, два или три байта данных. Обезопасить передаваемые данные в нашем случае означает, что приняв сообщение можно с какой-то долей вероятности понять, что отправлялось оно не таким. В нашей задаче есть 3-и составляющих. Отправитель сообщения, канал по которому оно доходит до принимающего и принимающая сторона. Повторю что мы хотим некий алгоритм позволяющий понять, что на пути от отправителя до принимающего, что-то пошло не так и сообщение испортилось. Плюс не рассматриваем защиту передачи байтов данных, нас интересует именно некий набор байт собранный в сообщение.
Далеко не всегда от кода требуется коррекция ошибок. Многие современные каналы связи обладают приемлемыми характеристиками, и зачастую достаточно лишь проверить, успешно ли прошла передача или возникли какие-нибудь сложности; структура же ошибок и конкретные позиции неверных символов совершенно не интересуют принимающую сторону. И в этих условиях очень удачным решением оказались алгоритмы, использующие контрольные суммы. CRC как нельзя лучше подходит для подобных задач: невысокие затраты ресурсов, простота реализации и уже сформированный математический аппарат из теории линейных циклических кодов обеспечили ей огромную популярность.

Как вариант помехоустойчивого кодирования, можно прикрепить байт в котором будет указанна сумма значений всех байт в пакете (сумма может переполнится но это не страшно). Это увеличит вероятность понять ошибку если она произошла, но можно много версий выдвинуть с ходу когда данные при транспортировки поломались но наш алгоритм скажет что все хорошо. Дело в том что много вариантов изменения битов в передаваемых байтах таким образом, что сумма байт в сообщении останется прежней. (важно что этот вариант не про нашу статью)

Как считать CRC ?
Ответом на этот вопрос будет служить pdf документ вложенный в архив для скачивания.
Ross N. Williams : (Название документа [crcguide.pdf ] )
Элементарное руководство по CRC алгоритмам обнаружения ошибок
Все, что Вы хотели бы знать о CRC алгоритмах, но боялись спросить, опасаясь, что ошибки Ваших знаний могут быть обнаружены

Статьи в помощь :
Подключение avr микроконтроллера к компьютеру(FT232RL)
AVR микроконтроллеры для начинающих (урок 12) UART/USART в avr
Подключение avr микроконтроллера к компьютеру
Уроки (C/C++) в Builder6

Это часть цикла взаимосвязанных статей TxRxV1:
1) (Borland C++Builder 6) [Статья 6] (TxRxV1)(SLIP)(ESC)(ESC)(Обмен)(Протокол)(C/C++)
2) (Borland C++Builder 6) [Статья 7] (TxRxV1)(FTDI)(ftd2xx)(FT_Write)(FT_Read)(Обмен)(C/C++)
3) (Borland C++Builder 6) [Статья 8] (TxRxV1)(CRC)(Контрольная сумма)(Обмен)(C/C++)
4) (Borland C++Builder 6) [Статья 9] (TxRxV1)(Канал)(Протокол)(Связь)(Обмен)(C/C++)
5) (Borland C++Builder 6) [Статья 10] (TxRxV1)(FILE)(Process)(Tread)(stdio)(C/C++)
6) (Borland C++Builder 6) [Статья 11] (TxRxV1)(Driver)(Поток)(Параллелизм)(stdio)(C/C++)
7) (Borland C++Builder 6) [Статья 12] (TxRxV1)(Buf)(FIFO)(LIFO)(Pocket)(C/C++)
8) (Borland C++Builder 6) [Статья 13] (TxRxV1)(TestUse)(AVR)(uart)(Tx/Rx)(C/C++)
9) (Borland C++Builder 6) [Статья 14] (TxRxV1)(TestUse)(STM32)(uart)(Tx/Rx)(C/C++)

Ссылки на комплектующие:
Микроконтроллер: ATmega32 (ссылка)
Микроконтроллер: STM32
(ссылка)
Мини перемычка: (ссылка)
Микросхема преобразователь: FT232RL (ссылка)

Модуль из статьи:  (ссылка)
Кабель для подключения модуля: (ссылка)

Функции DAH_CRC.H (ссылка на скачивание)

DAH_CRC.h

DAH_CRC.cpp


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *