Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

напримаер даже так (+)

Отправлено DASM 09 марта 2007 г. 18:17
В ответ на: Во, шайтан! Я как-то в свое время такую замечательную штуку умудрился проглядеть! отправлено Сидоргек 09 марта 2007 г. 18:15


U32 CalcCrc (unsigned char *pdata, int count)
{
union
{
U32 POLY;
struct
{
unsigned char POLY0;
unsigned char POLY1;
unsigned char POLY2;
unsigned char POLY3;
};
};
union
{
U32 CRC;
struct
{
unsigned char BCRC0;
unsigned char BCRC1;
unsigned char BCRC2;
unsigned char BCRC3;
};
};
union
{
U32 TAP;
struct
{
unsigned char TAP0;
unsigned char TAP1;
unsigned char TAP2;
unsigned char TAP3;
};
};
CRC = 0;
TAP = 0;
POLY = 0x00400007;
char CRCF = 0;
for (int i = 0; i < count; i++)
{
if (CRC & (1<<31))
CRCF = 1; else CRCF = 0;
CRC <<= 1;
TAP = 0;
unsigned byte = *pdata++;
if (byte & 0x01) TAP |= (1 << 0);
if (byte & 0x02) TAP |= (1 << 3);
if (byte & 0x04) TAP |= (1 << 5);
if (byte & 0x08) TAP |= (1 << 8);
if (byte & 0x10) TAP |= (1 << 10);
if (byte & 0x20) TAP |= (1 << 13);
if (byte & 0x40) TAP |= (1 << 16);
if (byte & 0x80) TAP |= (1 << 18);

BCRC0 ^= TAP0;
BCRC1 ^= TAP1;
BCRC2 ^= TAP2;
BCRC3 ^= TAP3;

if (CRCF)
{
BCRC0 ^= POLY0;
BCRC1 ^= POLY1;
BCRC2 ^= POLY2;
BCRC3 ^= POLY3;
}
}

return CRC;
}




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 567:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru