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

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

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

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

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

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

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

 
Опции темы
Непрочитано 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.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 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
Сообщений: 360
Сказал спасибо: 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 09:58


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot