реклама на сайте
подробности

 
 
> Контрольная сумма CRC, на AVRе
zombi
сообщение Feb 2 2009, 16:44
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Ув. форумчане, посоветуйте какой нибудь желательно не сложный но надежный и быстрый алгоритм рассчета CRC блока RAM.
Очень важна скорость расчета.
Размер блока может быть от 0.1 до 32 Кб.
Сейчас я планирую просто просуммировать весь блок ка 4-х байтные числа, в результате буду иметь КС 4 байта.
Но боюсь что такой метод не очень надежен.
Читал про алгоритмы типа MD5... др. прикинул сколько кода понадобится для его реализации на асме авра и понял что время расчета будет очень большим, а мне нужно чем побыстрее.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zombi
сообщение Feb 2 2009, 21:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106



Исходник на СИ :
CODE
unsigned long Crc32(unsigned char *buf, unsigned long len)
{
unsigned long crc_table[256];
unsigned long crc;

for (int i = 0; i < 256; i++)
{
crc = i;
for (int j = 0; j < 8; j++)
crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;

crc_table[i] = crc;
};

crc = 0xFFFFFFFFUL;

while (len--)
crc = crc_table[(crc ^ *buf++) & 0xFF] ^ (crc >> 8);

return crc ^ 0xFFFFFFFFUL;
};

Переписал на Паскале
CODE
var data:array[0..$ffff] of byte;

{
подготовка массива data[]
}


{ Считает crc в массиве data[] от start до endd }
procedure CRC32(start,endd:word):dword;
var
crc_table:array [0..255] of dword;
crc:dword;
i,j:word;
begin
for i:=0 to 255 do begin
crc:=i;
for j:=0 to 7 do if (crc and 1)=1 then crc:=((crc shr 1) xor $EDB88320)
else crc:=crc shr 1;
crc_table[i]:=crc;
end;
crc:=$FFFFFFFF;
for i:=start to endd do begin
crc:=(crc_table[(crc xor data[i]) and $ff]) xor (crc shr 8);
end;
CRC32:=crc xor $FFFFFFFF;
end;


Поправьте меня если ошибся.
Причина редактирования: Уменьшение видимого размера вложенных в сообщение исходников.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zombi   Контрольная сумма CRC   Feb 2 2009, 16:44
- - Nickolya_K   Application Note 27 от Dallas там есть расчет CRC...   Feb 2 2009, 17:23
|- - zombi   Цитата(Nickolya_K @ Feb 2 2009, 20:23) Ap...   Feb 2 2009, 18:33
|- - smac   Цитата(zombi @ Feb 2 2009, 21:33) Помогит...   Feb 2 2009, 18:56
||- - zombi   Цитата(smac @ Feb 2 2009, 21:56) боюсь ош...   Feb 2 2009, 19:10
||- - demiurg_spb   Цитата(zombi @ Feb 2 2009, 22:10) crc ^= ...   Feb 2 2009, 20:29
||- - aaarrr   Цитата(demiurg_spb @ Feb 2 2009, 23:29) c...   Feb 2 2009, 20:33
||- - zombi   Цитата(aaarrr @ Feb 3 2009, 00:33) Что в ...   Feb 2 2009, 20:50
||- - demiurg_spb   Кстати, если используете avr-gcc (WinAVR), то уже ...   Feb 2 2009, 20:50
|- - Baser   Цитата(zombi @ Feb 2 2009, 20:33) Но не с...   Feb 2 2009, 20:55
- - _Pasha   Цитата(zombi @ Feb 2 2009, 19:44) Очень в...   Feb 2 2009, 18:09
- - Harbour   Кодu16 r5_sum(unsigned char *b, u32 len) {...   Feb 3 2009, 03:41
- - tolik1   Цитата(zombi @ Feb 2 2009, 19:44) Ув. фор...   Feb 3 2009, 08:17
- - Nickolya_K   http://www.microshadow.com/files/files8051/app27.p...   Feb 3 2009, 08:34
- - XVR   Посмотрите на Коды Флетчера. Очень быстрые и не тр...   Feb 3 2009, 10:09
- - zombi   Спасибо Всем! Но меня очень интересует Ваше м...   Feb 3 2009, 10:41
- - XVR   Цитата(zombi @ Feb 3 2009, 13:41) Спасибо...   Feb 4 2009, 08:43
- - zombi   Цитата(XVR @ Feb 4 2009, 11:43) Все прави...   Feb 4 2009, 18:03


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 06:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01379 секунд с 7
ELECTRONIX ©2004-2016