Дело в том, что мне нужно вычислить 32-битный CRC с использованием IAR, чтобы автоматически сохранить это значение в известном адресе памяти но результат, предоставленный IAR и тот, который я вычисляю с использованием функции C (проверенный с использованием некоторых онлайн-калькуляторов), не соответствует. В следующих параграфах я попытаюсь пойти шаг за шагом, следуя за всем процессом, который я выполнил.Расчет IAR linker CRC32 не совпадает с расчетом, рассчитанным в C (и в других сетях)
Я настроил линкер IAR, как это рекомендуется (мне так кажется, по крайней мере) в следующей ссылке: IAR documentation CRC links Дело в том, что я настроил его как в Рассчитать CRC32, как и в STM32 аппаратных средств (v.5.50 и позже) пример (первая часть этого, потому что у меня IAR 6.5). Как я вижу, я попытался клонировать конфигурацию, показанную на скриншоте: CONFIGURATION PICTURE
И это конфигурация, которую я использую в своей C файл CRC:
/* PARAMETERS EXPLANATION
* 'order' [1..32] is the CRC polynom order, counted without the leading
* '1' bit.
* 'polynom' is the CRC polynom without leading '1' bit.
* 'direct' [0,1] specifies the kind of algorithm: 1=direct, no augmented
* zero bits.
* 'crcinit' is the initial CRC value belonging to that algorithm.
* 'crcxor' is the final XOR value.
* 'refin' [0,1] specifies if a data byte is reflected before processing
* (UART) or not.
* 'refout' [0,1] specifies if the CRC will be reflected before XOR.
*/
/* Init parameters for CRC 32 algorithm */
crcParams.order = 32;
crcParams.polynom = 0x4C11DB7;
crcParams.direct = true;
crcParams.crcinit = 0xffffffff;
crcParams.crcxor = 0xffffffff;
crcParams.refin = false;
crcParams.refout = false;
я имел сомнения, если crcxor должно быть 0xFFFFFFFF или 0x00000000, но я попытался с обоими без получения ожидаемого результата.
Для того, чтобы проверить, что функция C работала, я использовал следующие сайты:
код C Я использую для вычисления CRC базируется в одном объяснил здесь: CRC C code
Это пример конфигурации, используемой на одном из сайтов:
Любая помощь будет по достоинству оценена.
Заранее спасибо.
Лучшие ребра.
Иван
Я также пытался реализовать код C, данный IAR в следующей ссылке https://www.iar.com/support/tech-notes/general/c -source-for-crc32/ Но это тоже не работает. – Fulgor3
Их [небольшое руководство по отладке CRC] (https://www.iar.com/support/tech-notes/general/debugging-checksum-calculations/) на самом деле очень хорошее. Вы должны посмотреть на это. –
Наиболее вероятный источник проблемы (есть и другие возможности) - разные коды используют разные «полиномы», – user3629249