Jump to content

    
Димон Безпарольный

Помогите по CRC32. На компьютерном Си работает, в микроконтролере дает неверный результат

Recommended Posts

Считаю контрольную сумму 16-ти байт

Quote

01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

Формирую бинарный файл с этими данными, получаю результат 0xСECEE288(crc файла в Проводнике). Контроллер выдает 0x31311D77. Загнал алгоритм (код ниже) в C-Free компилятор. Тоже получил 0xСECEE288. Сравнил сформированные таблицы - одинаковые. Закипел.

Код формирования таблицы unsigned long crc_table[256]; Таблица глобальная

void Crc32Init(void)
{
unsigned long crc;
	for (int i = 0; i < 256; i++)								//инициализируем таблицу расчёта Crc32
		{
			crc = i;
			for (int j = 0; j < 8; j++)							//цикл перебора полинома
			crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;
			crc_table[i] = crc;
		}
	inCRC = 0xFFFFFFFF;
}

Код самого подсчета

unsigned long int Crc32(unsigned char Byte)
{
	inCRC = (inCRC >> 8) ^ crc_table[(inCRC ^ Byte) & 0xFF];
	return inCRC ^ 0xFFFFFFFF;
}

inCRC - глобальная переменная unsigned long int inCRC = 0xFFFFFFFF; в которой накапливается сумма. Может подскажет кто, где я накосячил?

 

 

 

 

 

 

 

 

 

 

Edited by Димон Безпарольный

Share this post


Link to post
Share on other sites

2 * 2, конечно, "сэм-восэм", но c 1 до 15 никак не 16 чисел, входные байты могут и "зеркалиться" относительно их середины.
А "если мы с вами посмотрим, то мы с вами увидим" ((с) моя школьная историчка): 0xСECEE288 инверсия 0x31311D77.

Share this post


Link to post
Share on other sites
8 hours ago, Obam said:

0xСECEE288 инверсия 0x31311D77

Точно инверсия. Буду разбираться откуда она берется. Сам алгоритм выдает на двух компиляторах данные без инверсии.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.