IAR链接器CRC32计算与在C(以及其他网络)中计算的计算不匹配

时间:2016-07-13 08:55:40

标签: c crc32 iar

关键是我需要使用IAR计算32位CRC,以便将此值自动存储到已知的内存地址中,但IAR给出的结果和我使用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功能是否正常,我使用了以下网站:

FIRST CRC32 CALCULATOR

SECOND CRC32 CALCULATOR

我用来计算CRC的C代码基于这里解释的代码: CRC C code

这是其中一个网站使用的配置示例: CRC CONFIGURATION BASED ON THE STM32 EXAMPLE

任何帮助都将非常感激。

提前致谢。

最好的regrads。

伊万

2 个答案:

答案 0 :(得分:1)

最后我解决了这个问题。我使用这个CRC32代码适合我的目的: https://www.iar.com/support/tech-notes/general/c-source-for-crc32/

在我的所有其他尝试中,我使用了正确的多项式并尝试了IAR链接器校验和配置中与其他板一起使用的所有配置,但这些配置不起作用。所以我使用的配置是init值为0xFFFFFFFF和以下IAR链接器配置:

enter image description here

我希望这会有所帮助。这是非常罕见的,因为我实现了另一个问题,我认为是有效的CRC32实现。

致以最诚挚的问候,

伊万

答案 1 :(得分:0)

为什么你认为their code不起作用?你的测试用例是什么?

CRC-32在正向使用多项式0x04c11db7,初始CRC等于0xc704dd7b且没有最终的异或。因此fast_crc32(0xc704dd7b, data, length)将返回data[0..length-1]的CRC。