Отговори на тема  [ 11 мнения ] 
CRC16 въпрос 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение CRC16 въпрос
абе аз все си ползвам един мой алгоритъм, който обаче никога не съм проверявал дали дава същиея резултат като калкулаторите. Компилирам аз днес на х51 ядрото и се оказва че не отговаря, а тоя път от другата страна да речем не е мой софт и би трябвало да генерира по някой от стандартните. Предплагам проблема е полинома ....
Значи какво пробвах ...
unsigned int CRC16( char *source, unsigned int size)
{
unsigned int crc = 0,
i;
for(i = 0; i < size; i++)
{
crc = CRC16_table[(crc >> 8) & 0xFF] ^ (crc << 8) ^ (*source+i);
}

return crc;
}

тук ползвам таблица.
Пробвах на приев кода от някаква тема, но също не получавам резултат като с калкулаторите, пробвах и един друг мой алгоритъм който не е табличен, ама някак все не е като в калкулатора, за това на CCS няма да говорим :)


Нед Авг 27, 2006 1:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Сеп 26, 2004 4:11 pm
Мнения: 3750
Местоположение: София
Мнение 
(*source+i) дали дава същото като *(source+i) :roll:


Нед Авг 27, 2006 1:14 pm
Профил ICQ
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение 
Едва ли :)


Нед Авг 27, 2006 2:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
ами ... за тов аможе да се помисли, ама е факт че първата перация е прави с първия байт от масива .....но .. все пак сега ще пробваме да видим ....


да де .. малко съм тъп, ама т е малко ... на първия наистина не оказва влияние, все пак е 0 :) ..........

не че като го оправих ми дава същото CRC като калкулатора де, но мерси за корекцията, даже не бях се замислил какво съм написал :)


Нед Авг 27, 2006 2:16 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Окт 31, 2004 9:19 pm
Мнения: 4464
Местоположение: Stara Zagora
Мнение 
http://www.lammertbies.nl/comm/info/crc ... ation.html


Нед Авг 27, 2006 5:28 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
тъкмо тоя калкулатор ползвам. А алгоритъма е кейлски ако не се лъжа по горе, с лека модификациа само в предаването на данните към функциите.

п.с. и между друото на две три места съм го ползвал и си работи, само дето сега забелязвам че това дето връща не е като на нормалнот CRC16, най-вероятно таблицата е правена за друг полином.


Нед Авг 27, 2006 7:00 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Дек 19, 2004 6:26 pm
Мнения: 1628
Местоположение: Сливен
Мнение 
ToHu написа:
тъкмо тоя калкулатор ползвам. А алгоритъма е кейлски ако не се лъжа по горе, с лека модификациа само в предаването на данните към функциите.

п.с. и между друото на две три места съм го ползвал и си работи, само дето сега забелязвам че това дето връща не е като на нормалнот CRC16, най-вероятно таблицата е правена за друг полином.


или за друга първоначална стойност на регистъра
виждал съм и с инверсия да се полозва полинома
//аз имах същия проблем за CRC8 , но с програмиста си уточнихме мерките и стана//


Нед Авг 27, 2006 7:09 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Мдааа този сорс по горе ... ясно защо не ще ....трябва да е ето така :

crc = CRC16_table[(crc >> 8 & 0xFF) ^ *(source+i)] ^(crc << 8);

това е добър пример защо copy/paste не е добре да се прави, и това е нещо дето съм го ползвал на няколко места .....


Вто Авг 29, 2006 11:33 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Моето CRC16 използва полинома 0xA001. Погледнах линка на калкулатора, който си дал, преди доста време се дзверих и аз с него, обаче така и така не можах да докарам правилно CRC16 с този калкулатор и с полином 0xA001. Моето със сигурност смята вярно CRC16, тъй като иначе нямаха да ми работят програмите с LonWorks мрежите на Echelon :wink: ( Всъщност, не съм въобще сигурен дали Echelon го смятат правилно )

Пак в този линк, по-долу има сорсове на Ц за изтегляне, смятащи CRC16, що не видиш те как се държат ?

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Вто Авг 29, 2006 11:53 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами тръгна, генерира вече както трябва, имаше грешка в сорса, естествено сега като е загледах по подробно я забелязох, това кеото се вземасхе от таблицата не бесхе резултат от текущата стойност а т предходната. Малко извратено, не знам нарочно лие било така направено, и доколко в тоя вид открива както и нормално CRC.


Сря Авг 30, 2006 12:12 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
При някой CRC има следното

CRC32 = 0xFFFFFFFF; // CLEAR CRC
CRC32 = CalculateCRC32(buffer, len);// с таблица
CRC32 = ~CRC32;

не се споменава в документациите за сетване и накрая НОТ - откъдето идва видима "Грешка", иначе сорса за Калкулация си е напълно правилен


Сря Авг 30, 2006 12:31 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни