Как вычислять контрольную сумму - CRC8 CRC16 ?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: Как вычислять контрольную сумму - CRC8 CRC16 ?

Сообщение stas00n »

Ну вот и я добрался до этих CRC... Подскажите мне вот что - если в моем приложении пакеты не особо длинные (5-40 байт), можно ли заменить подсчет CRC16 менее сложным алгоритмом обнаружения ошибок? Например, банальным xor, как в NMEA протоколе, или xor с прокруткой? Протокол обмена у меня будет самописный, т.е., в принципе - че хочу то ворочу, линия связи - короткая, наличие помех->0, скорость обмена небольшая. Понятно, что CRC не дураки придумали, но все же насколько оправдано применение CRC16 в моих условиях? Очень уж мне не хочется считать CRC16 в контроллере, да еще и таблично - 512 байт на массив в двухкилобайтном МК - весьма ощутимо.
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Как вычислять контрольную сумму - CRC8 CRC16 ?

Сообщение urry »

uint16_t crc16_update(uint16_t crc, uint8_t a)
{
int i;

crc ^= a;
for (i = 0; i < 8; ++i)
{
if (crc & 1)
crc = (crc >> 1) ^ 0xA001;
else
crc = (crc >> 1);
}

return crc;
}
//-----------------------------------------------------------
это не больно - вот например, вычисление црц 16 с полиномом а001 для очередного байта в функцию передаете старое значение црц и байт данных, возвращаете новое значение црс.
Реклама
stas00n
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Re: Как вычислять контрольную сумму - CRC8 CRC16 ?

Сообщение stas00n »

urry, попробую, надо прикинуть времязатраты, если будет значительно меньше времени передачи пакета - так и сделаю. Кстати, за основу я взял modbus протокол, там именно такой полином и применяется.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»