Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Народ! Подскажите по алгоритму CRC16. Какой лучше выбрать

Непрочитано 03.04.2008, 09:46  
Don_Ambrosio
Вид на жительство
 
Регистрация: 28.02.2008
Сообщений: 437
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Don_Ambrosio на пути к лучшему
По умолчанию Народ! Подскажите по алгоритму CRC16. Какой лучше выбрать

Чтобы было как можно меньше слепых пятен.

Пробовал инициализировать сдвиговый регистр $FFFF в начале и дописывать $FFFF в конце. Всё равно посчитав увидел что CRC16 не зависит от количества нулевых слов в "серёдке" пакета
Реклама:
__________________
Дон Амброзио благодарит алфавит за любезно предоставленные буквы
Блин!! Морковь в 2,5 раза подорожала!!!
Don_Ambrosio вне форума  
Непрочитано 03.04.2008, 11:02  
urry
Почётный гражданин KAZUS.RUN
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 107 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

Код:
// CRC16 procedure
// *data - pointer to data
// quantity - data length
// *crc_calc - pointer to crc16 sum
void crc16(unsigned char *data, unsigned int *crc_calc, unsigned char quantity)
{
    int i, index;
    unsigned short C;
    *crc_calc = 0;
    for (index=1;index‹=quantity;index++,data++){
        C=((*crc_calc››8)^*data)‹‹8;
        for (i=0;i‹8;i++){
            if (C&0x8000) C = (C‹‹1)^0x1021; полином
            else              C = C‹‹1;
        }
        *crc_calc = C^(*crc_calc‹‹8);
    }
}
urry вне форума  
Непрочитано 03.04.2008, 11:04  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 359
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

Можно к КС добавлять количество байт, если это так важно. Т.е. с очередным байтом (словом) добавляем к КС +1. Можно каждый байт (слово) XOR ить с какой нибудь константой и прибавлять. и т.д.
Удачи.
nokazus вне форума  
Непрочитано 03.04.2008, 11:08  
Don_Ambrosio
Вид на жительство
 
Регистрация: 28.02.2008
Сообщений: 437
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Don_Ambrosio на пути к лучшему
По умолчанию

Вопрос в том, какой алгоритм подсчёта CRC16 и какие параметры этого алгоритма выбрать, чтобы не было "слепых" мест когда CRC не меняется при изменении размера области сплошных нулей или $FF в начале , середке или хвосте блока данных при неизменной длине этого блока данных

Приведу пример для CRC2Берём неприводимый полином 111

Попробуем сформировать CRC2 для 10.
Дописываем слева 11 получаем 1110. "Делим" по алгоритму CRC 1110 на 111 получам 0.

И сколько бы не было нулей в конце если начало блока равно 10 CRC2 всегда будет 0

Смысл такой: если в некотором блоке данных на некотором этапе CRC-деления на полином остаток стал равен нулю, то с этого момента можете пихать в блок сколько угодно нулей, CRC не измениться

Можно вместо нулей вставлять блоки, делящиеся на полином без остатка. CRC при этом тоже не измениться.

И мой вопрос: ка избавиться от этой неприятной фигни
__________________
Дон Амброзио благодарит алфавит за любезно предоставленные буквы
Блин!! Морковь в 2,5 раза подорожала!!!
Don_Ambrosio вне форума  
Непрочитано 20.06.2008, 08:43  
LeonidIwanowitch
Прописка
 
Регистрация: 10.06.2008
Сообщений: 115
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
LeonidIwanowitch на пути к лучшему
По умолчанию

Смысл такой: если в некотором блоке данных на некотором этапе CRC-деления на полином остаток стал равен нулю, то с этого момента можете пихать в блок сколько угодно нулей, CRC не измениться
LeonidIwanowitch вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой САПР выбрать alexis69 Proteus, KiCAD и другие ECAD 142 27.02.2015 17:55
какой компилятор выбрать? chipman Proteus, KiCAD и другие ECAD 0 03.05.2007 18:01
Подскажите какой цифровой термосенсор выбрать igis Измерительное оборудование 7 17.01.2007 09:08
Какой кабель лучше ? CD_Eater Информация по радиокомпонентам 1 01.09.2004 10:09
Какой звук выбрать? Sergdj Аудиотехника 1 03.07.2003 10:58


Часовой пояс GMT +4, время: 22:09.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.