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

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

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

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

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

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

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

 
Опции темы
Непрочитано 31.03.2008, 15:24  
west329
Частый гость
 
Регистрация: 13.11.2007
Сообщений: 43
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
west329 на пути к лучшему
По умолчанию crc32 для AVR

Нашел исходник crc32 на С, собрал под megu8, съело все ресурсы MK,



Код:
crc32.c 
iccavr.exe E:RADIOIAR4.21Aavr	utorXboxcryptcrc32.c --cpu=m32 -ms -o E:RADIOIAR4.21Aavr	utor 
XboxDebugObj --initializers_in_flash -s2 --no_cse --no_inline --no_code_motion --no_cross_call  
--no_clustering --no_tbaa --cross_call_passes=5 --debug --do_cross_call -e -I E:RADIOIAR4.21AavrINC  
-I E:RADIOIAR4.21AavrINCCLIB --eeprom_size 1024  
 
   IAR Atmel AVR C/C++ Compiler V4.21A/W32, Evaluation Version  
   Copyright 1996-2006 IAR Systems. All rights reserved.  
  
 1 736 bytes of CODE memory (+ 6 bytes shared) 
 1 024 bytes of DATA memory 
 
Errors: none 
Warnings: none

Есть ли реализация не табличного метода расчета CRC 32 а динамический ?
С ув.

Прикрепленный файл: 2310749.rar
Реклама:
west329 вне форума  
Непрочитано 31.03.2008, 22:45  
greafuger
Прописка
 
Регистрация: 10.11.2007
Сообщений: 104
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
greafuger на пути к лучшему
По умолчанию

Дык молодец! Нашел что собирать... Там же надо переделывать исходник, просто так не стоит втыкать в чип.
Лови, у меня работал на ATMega8535. В 1 кб флеша должен залезть, но ты проверь.
Компилятор: Gcc

Прикрепленный файл: 2388858.zip
greafuger вне форума  
Непрочитано 01.04.2008, 09:45  
west329
Частый гость
 
Регистрация: 13.11.2007
Сообщений: 43
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
west329 на пути к лучшему
По умолчанию

Сообщение от greafuger
Дык молодец! Нашел что собирать... Там же надо переделывать исходник, просто так не стоит втыкать в чип.
Лови, у меня работал на ATMega8535. В 1 кб флеша должен залезть, но ты проверь.
Компилятор: Gcc
Просто под руками ничего достойного не оказалось, вот и решил поексперементировать, буду пробовать.

Кстати вот нашол ещё один вариант на avrfreaks.

Код:
// CCITT CRC-32 (Autodin II) polynomial: 
// X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X+1 

unsigned long CalcCRC (unsigned long crc, char *buffer, int length) 
   { 
   int   i,j ; 
   for (i=0; i‹length; i++) 
      { 
      crc = crc ^ *buffer++ ; 
      for (j=0; j‹8; j++) 
         { 
         if (crc & 1) 
            crc = (crc››1) ^ 0xEDB88320 ; 
         else 
            crc = crc ››1 ; 
         } 
      } 
   return crc ; 
   }
но почемуто не сходятся результаты контрольной суммы ??
подключаю так для строки
Код:
...
...
unsigned char data_md5[] = "90374f4467290d9df0a2d0273c568246";


void main( void )
{
  
  unsigned long crcPoly = 0x4C11DB7; //polynom 0x4c11db7
  unsigned long crcOUT;
  
crcOUT = CalcCRC (crcPoly,&data_md5[0],sizeof(data_md5)-1);
}
следуюющи код генерируеты 0x23FA1C29

проверял на сайте
http://www.zorc.breitbandkatze.de/crc.html
там получается 0хA130846D

http://www.hash-calculator.com/ru/
там получается 0хe6022b5a

???

Прикрепленный файл: 2388858.zip
west329 вне форума  
Непрочитано 19.03.2015, 23:08  
_IgorT_
Прохожий
 
Регистрация: 19.03.2015
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
_IgorT_ на пути к лучшему
По умолчанию Re: crc32 для AVR

Может кому интересно CRC-32-IEEE 802.3 (0x04C11DB7) на AtmelStudio:
CRC32 по классификации WiKipedia:
Name : CRC 32
Width : 32
Poly : 04C11DB7
Init : FFFFFFFF
RefIn : True
RefOut : True
XorOut : FFFFFFFF
Check : CBF43926 (на проверочную комбинацию "123456789" )

Расчёт CRC побито во:

// 0x04C11DB7

uint32_t CRC_32(uint32_t __crc, uint8_t __data);
uint32_t ReversDW(uint32_t __crc);

uint32_t CRC_32(uint32_t __crc, uint8_t __data)
{
uint32_t __ret; /*%D0:%C0:%B0:%A0 (alias for __crc) */
uint32_t __tmp1; /* %D1:%C1:%B1:%A1 */
uint8_t __tmp2; /* %2 */
/* %3 __data */

__asm__ __volatile__ (
"mov __tmp_reg__,%3" "\n\t" /* crc.lo ^ data */
"ldi %A1, 0xB7" "\n\t"
"ldi %B1, 0x1D" "\n\t"
"ldi %C1, 0xC1" "\n\t"
"ldi %D1, 0x04" "\n\t"
"ldi %2, 8" "\n\t"
"CRC32_1:" "\n\t"
"lsr __tmp_reg__" "\n\t"
"rol %A0" "\n\t"
"rol %B0" "\n\t"
"rol %C0" "\n\t"
"rol %D0" "\n\t"
"brcc CRC32_2" "\n\t"
"eor %A0, %A1" "\n\t"
"eor %B0, %B1" "\n\t"
"eor %C0, %C1" "\n\t"
"eor %D0, %D1" "\n\t"
"CRC32_2:"
"dec %2" "\n\t"
"brne CRC32_1" "\n\t"
: "=d" (__ret), "=d" (__tmp1), "=d" (__tmp2)
: "r" (__data), "0" (__crc)
: "r0"
);
return __ret;
}

// зеркалит вход
uint32_t ReversDW(uint32_t __crc)
{
uint32_t __ret; /*%D0:%C0:%B0:%A0 (alias for __crc) */
__asm__ __volatile__ (
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"
"rol %D0" "\n\t"
"ror %A0" "\n\t"

"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
"rol %C0" "\n\t"
"ror %B0" "\n\t"
: "=d" (__ret)
: "0" (__crc)
);
return __ret;
}

Пример расчёта:
uint32_t crc;
uint32_t temp = 0x46AF6449;
temp = CRC_32(temp,'1');
temp = CRC_32(temp,'2');
temp = CRC_32(temp,'3');
temp = CRC_32(temp,'4');
temp = CRC_32(temp,'5');
temp = CRC_32(temp,'6');
temp = CRC_32(temp,'7');
temp = CRC_32(temp,'8');
temp = CRC_32(temp,'9');
temp = CRC_32(temp,0);
temp = CRC_32(temp,0);
temp = CRC_32(temp,0);
temp = CRC_32(temp,0);
crc = ~ReversDW(temp);

Пояснения:
Начальное значение 0x46AF6449 это потому, что сначала прокручивается 0xFFFFFFFF через:

for (i=0; i‹32; i++) {

bit = crc & 1;
if (bit) crc^= polynom;
crc ››= 1;
if (bit) crc|= crchighbit;
}
Исходники и пример расчёта: http://www.zorc.breitbandkatze.de/crc.html
_IgorT_ вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MODBUS для AVR-ов nerozero Микроконтроллеры, АЦП, память и т.д 2 13.01.2008 12:42
калькулятор для расчета таймеров счетчиков для AVR dimonbest Proteus, KiCAD и другие ECAD 23 21.09.2007 08:55
ОС для AVR xelos Микроконтроллеры, АЦП, память и т.д 3 25.06.2006 18:09
Програматор для AVR chipic128 Микроконтроллеры, АЦП, память и т.д 8 10.10.2005 14:52


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


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