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

 
 
> Контрольная сумма 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
Ответов
Nickolya_K
сообщение Feb 2 2009, 17:23
Сообщение #2





Группа: Новичок
Сообщений: 12
Регистрация: 22-08-07
Пользователь №: 29 981



Application Note 27 от Dallas там есть расчет CRC-16
две таблицы по 256 байт и программа для расчета
Go to the top of the page
 
+Quote Post
zombi
сообщение Feb 2 2009, 18:33
Сообщение #3


Гуру
******

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



Цитата(Nickolya_K @ Feb 2 2009, 20:23) *
Application Note 27 от Dallas там есть расчет CRC-16
две таблицы по 256 байт и программа для расчета


Спасибо Nickolya_K.
А дай пожалуйста ссылочку на Application Note 27 от Dallas!

Цитата(_Pasha @ Feb 2 2009, 21:09) *
1. Побыстрей - это сколько (в тактах, хоть примерно?)

2. Контрольную сумму городить не надо - действительно мучения.


http://www.eagleairaust.com.au/code/crc16.htm - гугл, простенько и со вкусом smile.gif


Код
// Update the CRC for transmitted and received data using
// the CCITT 16bit algorithm (X^16 + X^12 + X^5 + 1).

    unsigned char ser_data;
    static unsigned int crc;

    crc  = (unsigned char)(crc >> 8) | (crc << 8);
    crc ^= ser_data;
    crc ^= (unsigned char)(crc & 0xff) >> 4;
    crc ^= (crc << 8) << 4;
    crc ^= ((crc & 0xff) << 4) << 1;


Спасибо Pasha.
Но не силен я в СИ !
Я тока понял что на входе "unsigned char"-байт на выходе "unsigned int"-слово тобиш CRC16, или нет!?
Помогите разжевать вот эту запись плиз :
crc = (unsigned char)(crc >> 8) | (crc << 8);
Go to the top of the page
 
+Quote Post
Baser
сообщение Feb 2 2009, 20:55
Сообщение #4


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(zombi @ Feb 2 2009, 20:33) *
Но не силен я в СИ !
...
Помогите разжевать вот эту запись плиз...

Вот вам из моего старинного проекта, на асме.
На 100% не уверен, но на 98% cool.gif этот код дает то же значение CRC, что и вышеприведенный на Си
Для проверки:
Код
01 05 FF 11 22 33 00 00 82 13  (CRC = 82 13)
FF 04 11 22 33 00 00 4B 08     (CRC = 4b 08)


CODE
#include "io8515.h"
RSEG CHECKSUM(1)
RSEG DEBUG(1)
;===============================================================;
; Calculate Flash code XModem CRC-CCITT ;
;===============================================================;
; EXTERN ByteCRC
CalcFlashCRC:
clr Z0
clr Z1
clr r16
clr r17

cal1: lpm ; Calculate CRC for next byte
mov r20,r0
rcall ByteCRC
adiw Z0,0x01
cpi Z0,low(SFB(CHECKSUM))
ldi r20,high(SFB(CHECKSUM))
cpc Z1,r20
brlo cal1

cal2: rjmp cal2 ; Flash CRC = DW 0x(r16:r17)

;---------------------------------------------------------------;
; Calculate one byte of XModem CRC-CCITT ;
; Function: int ByteCRC (int XmCRC,char Byte); ;
; Input: r17:r16 = Old value CRC-CCITT ;
; r20 = input byte ;
; Output: r17:r16 = New value CRC-CCITT ;
;---------------------------------------------------------------;
; PUBLIC ByteCRC
ByteCRC:eor r17,r20
ldi r21,8

bci1: lsl r16
rol r17
brcc bci2
ldi r20,0x10
eor r17,r20
ldi r20,0x21
eor r16,r20
bci2: dec r21
brne bci1
ret
;===============================================================;
END
Причина редактирования: Для уменьшения видимого размера сообщения в цитировании исходника тег code заменен на codebox.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zombi   Контрольная сумма CRC   Feb 2 2009, 16:44
|- - 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
- - _Pasha   Цитата(zombi @ Feb 2 2009, 19:44) Очень в...   Feb 2 2009, 18:09
- - zombi   Исходник на СИ : CODEunsigned long Crc32(unsigned ...   Feb 2 2009, 21:55
- - 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 Текстовая версия Сейчас: 21st July 2025 - 22:27
Рейтинг@Mail.ru


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