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

 
 
> CRC32, uint32_t
toweroff
сообщение Mar 1 2015, 21:16
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Добрый день!

Нужна софтовая реализация. Не проблема, гугел их находит не задумываясь

Но из того, что я находил, даже табличная реализация считает по 1 байту

А хотелось бы найти подсчет сразу по 32 бита, не по 8. Благо мой массив данных всегда кратен 4 байтам, а аппаратного CRC на борту контроллера нет
По идее, это же должно увеличить производительность? sm.gif

UPD
что-то нашел от Интела

черт... там используются 4 таблицы из uint32_t[256]
места в оперативке нет, во флеше тоже... придется побайтно считать crying.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
toweroff
сообщение Mar 11 2015, 20:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Так.
Не получается у меня, или я не так понял.

[BODY1]
[VALID_CRC1]

[BODY2]
[VALID_CRC2]

расчет CRC32 для обоих случаев блоков [BODY1+CRC1] и [BODY2+CRC2] должен дать одинаковый результат, который есть константа для данного полинома?
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 12 2015, 08:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(toweroff @ Mar 11 2015, 23:12) *
расчет CRC32 для обоих случаев блоков [BODY1+CRC1] и [BODY2+CRC2] должен дать одинаковый результат, который есть константа для данного полинома?

Да. Именно так. При условии, что последовательность бит в CRC не перевернута и не переставлена. Для неинвертированной CRC - ноль. Для инвертированной - некая ненулевая константа. Ищите ошибки у себя. В WinHex, возможно, порядок следования байт неверный сделали, little/big endian, когда CRC добавляли к блоку. Или сдвиг при подсчете CRC был не в ту сторону, чтобы добавлять CRC к блоку, не переворачивая биты задом наперед.

А чтобы лучше искалось, где ошибка - вот:

CODE

#include "memory.h"
#include "stdio.h"

typedef unsigned short USHORT;
typedef unsigned int UINT;

UINT CRC_EDB88320(char *buf, int len, UINT init)
{
UINT crc = init;

for (int pos = 0; pos < len; pos++) {

crc ^= (UINT)((unsigned char)(buf[pos]));

for (int i = 8; i != 0; i--) {
if ((crc & 1) != 0) {
crc >>= 1;
crc ^= 0xEDB88320;
}
else
crc >>= 1;
}
}
return crc;
}

int main(int argc, char* argv[])
{
char data[32];
UINT crc;

memcpy( data, "0123456", 7);
printf ("CRC=%08X\n", crc=CRC_EDB88320(data,7,0xFFFFFFFF));
crc = ~crc; memcpy( data+7, &crc, 4);
printf ("CONST=%08X\n", crc=CRC_EDB88320(data,11,0xFFFFFFFF));

memcpy( data, "235547welbxdgu", 14);
printf ("CRC=%08X\n", crc=CRC_EDB88320(data,14,0xFFFFFFFF));
crc=~crc; memcpy( data+14, &crc, 4);
printf ("CONST=%08X\n", crc=CRC_EDB88320(data,18,0xFFFFFFFF));

memcpy( data, "0123456", 7);
printf ("CRC=%08X\n", crc=CRC_EDB88320(data,7,0xFFFFFFFF));
memcpy( data+7, &crc, 4);
printf ("CONST=%08X\n", crc=CRC_EDB88320(data,11,0xFFFFFFFF));

memcpy( data, "235547welbxdgu", 14);
printf ("CRC=%08X\n", crc=CRC_EDB88320(data,14,0xFFFFFFFF));
memcpy( data+14, &crc, 4);
printf ("CONST=%08X\n", crc=CRC_EDB88320(data,18,0xFFFFFFFF));

return 0;
}



Вывод этой программы:

CRC=7240F711
CONST=DEBB20E3
CRC=28E92D48
CONST=DEBB20E3
CRC=7240F711
CONST=00000000
CRC=28E92D48
CONST=00000000
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- toweroff   CRC32   Mar 1 2015, 21:16
- - VAI   Вот 2 функции, одна "железная" для STM32...   Mar 2 2015, 05:49
- - toweroff   Спасибо! У меня не STM и не старшие кортексы ...   Mar 2 2015, 06:50
|- - blackfin   Цитата(toweroff @ Mar 2 2015, 09:50) Эта ...   Mar 2 2015, 07:05
|- - toweroff   Цитата(blackfin @ Mar 2 2015, 10:05) Там,...   Mar 2 2015, 07:32
- - ViKo   А вы перешлите второй раз прошивку для верификации...   Mar 2 2015, 08:14
|- - toweroff   Цитата(ViKo @ Mar 2 2015, 11:14) А вы пер...   Mar 2 2015, 10:48
|- - VAI   Цитата(ViKo @ Mar 2 2015, 12:14) А вы пер...   Mar 2 2015, 11:02
|- - toweroff   Цитата(VAI @ Mar 2 2015, 14:02) Запись же...   Mar 2 2015, 11:20
- - adnega   Типичный кусок кода для бестабличного вычисления: ...   Mar 2 2015, 11:12
|- - jcxz   Цитата(adnega @ Mar 2 2015, 17:12) Типичн...   Mar 2 2015, 11:38
|- - toweroff   Цитата(jcxz @ Mar 2 2015, 14:38) У нас бу...   Mar 2 2015, 11:55
|- - Сергей Борщ   Цитата(jcxz @ Mar 2 2015, 13:38) Также мо...   Mar 2 2015, 14:48
|- - jcxz   Цитата(Сергей Борщ @ Mar 2 2015, 20:48) Я...   Mar 2 2015, 14:55
|- - Сергей Борщ   Цитата(jcxz @ Mar 2 2015, 16:55) Я как ра...   Mar 2 2015, 16:16
- - ViKo   Кусками или целиком - какая разница? Сначала запис...   Mar 2 2015, 11:18
- - SM   Для CRC-32 такие конструкции категорически не выго...   Mar 2 2015, 17:13
|- - Сергей Борщ   Цитата(SM @ Mar 2 2015, 19:13) Для CRC-32...   Mar 3 2015, 07:54
|- - SM   Цитата(Сергей Борщ @ Mar 3 2015, 10:54) о...   Mar 3 2015, 08:11
|- - Сергей Борщ   Цитата(SM @ Mar 3 2015, 10:11) Это что зн...   Mar 3 2015, 09:08
- - SM   в общем, объясню на примере 0x8408: 1) byte ^= cr...   Mar 3 2015, 10:49
- - Сергей Борщ   Такс. Я разобрался. 0x8408, сдвиг вправо. За время...   Mar 3 2015, 12:24
|- - SM   Цитата(Сергей Борщ @ Mar 3 2015, 15:24) Т...   Mar 3 2015, 12:50
|- - Сергей Борщ   Цитата(SM @ Mar 3 2015, 14:50) Короче, им...   Mar 3 2015, 14:06
|- - SM   Цитата(Сергей Борщ @ Mar 3 2015, 17:06) Н...   Mar 3 2015, 14:23
|- - Сергей Борщ   Цитата(SM @ Mar 3 2015, 16:23) То есть, 0...   Mar 3 2015, 16:05
- - toweroff   Подниму тему вот по какому вопросу Когда пользова...   Mar 11 2015, 18:34
|- - SM   Цитата(toweroff @ Mar 11 2015, 21:34) но ...   Mar 11 2015, 18:49
- - toweroff   Да суть-то не в этом - с нулем или константой срав...   Mar 11 2015, 18:58
|- - SM   Цитата(toweroff @ Mar 11 2015, 21:58) Есл...   Mar 11 2015, 19:04
|- - toweroff   Цитата(SM @ Mar 11 2015, 22:04) Эту конст...   Mar 11 2015, 19:32
|- - SM   Цитата(toweroff @ Mar 11 2015, 22:32) хмм...   Mar 11 2015, 19:42
- - ViKo   Пользуюсь аппаратным CRC32 в STM32, никаких перест...   Mar 12 2015, 03:51
|- - toweroff   Цитата(ViKo @ Mar 12 2015, 06:51) Пользую...   Mar 12 2015, 04:48
- - ViKo   В аппаратном CRC STM32 перед началом расчета нужно...   Mar 12 2015, 06:16
- - toweroff   Вот о чем я и говорил - если не инвертировать, то ...   Mar 12 2015, 09:58
|- - SM   Цитата(toweroff @ Mar 12 2015, 12:58) Вот...   Mar 12 2015, 10:02
- - toweroff   Просто может возникнуть необходимость проверить ...   Mar 12 2015, 11:09


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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 03:22
Рейтинг@Mail.ru


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