Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

CRC16 въпрос
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=2817
Страница 1 от 1

Автор:  ToHu [ Нед Авг 27, 2006 1:08 pm ]
Заглавие:  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 няма да говорим :)

Автор:  bateAz [ Нед Авг 27, 2006 1:14 pm ]
Заглавие: 

(*source+i) дали дава същото като *(source+i) :roll:

Автор:  syscop [ Нед Авг 27, 2006 2:16 pm ]
Заглавие: 

Едва ли :)

Автор:  ToHu [ Нед Авг 27, 2006 2:16 pm ]
Заглавие: 

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


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

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

Автор:  Nikola Kirov [ Нед Авг 27, 2006 5:28 pm ]
Заглавие: 

http://www.lammertbies.nl/comm/info/crc ... ation.html

Автор:  ToHu [ Нед Авг 27, 2006 7:00 pm ]
Заглавие: 

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

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

Автор:  Wise [ Нед Авг 27, 2006 7:09 pm ]
Заглавие: 

ToHu написа:
тъкмо тоя калкулатор ползвам. А алгоритъма е кейлски ако не се лъжа по горе, с лека модификациа само в предаването на данните към функциите.

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


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

Автор:  ToHu [ Вто Авг 29, 2006 11:33 pm ]
Заглавие: 

Мдааа този сорс по горе ... ясно защо не ще ....трябва да е ето така :

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

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

Автор:  [ Вто Авг 29, 2006 11:53 pm ]
Заглавие: 

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

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

Автор:  ToHu [ Сря Авг 30, 2006 12:12 am ]
Заглавие: 

Ами тръгна, генерира вече както трябва, имаше грешка в сорса, естествено сега като е загледах по подробно я забелязох, това кеото се вземасхе от таблицата не бесхе резултат от текущата стойност а т предходната. Малко извратено, не знам нарочно лие било така направено, и доколко в тоя вид открива както и нормално CRC.

Автор:  TheWizard [ Сря Авг 30, 2006 12:31 am ]
Заглавие: 

При някой CRC има следното

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

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

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/