gpt4 book ai didi

c - IAR 链接器 CRC32 计算与 C(和其他网站)中计算的不匹配

转载 作者:太空宇宙 更新时间:2023-11-04 03:29:17 24 4
gpt4 key购买 nike

关键是我需要使用 IAR 计算一个 32 位 CRC,以便将这个值自动存储到一个已知的内存地址中,但是 IAR 给出的结果和我使用 C 函数计算的结果(使用一些在线检查计算器)不匹配。在接下来的段落中,我将尝试按照我遵循的所有过程逐步进行。

我在以下链接中按照建议(至少我认为如此)配置了 IAR 链接器: IAR documentation CRC links事实上,我已将其配置为在 STM32 硬件(v.5.50 及更高版本)示例中计算 CRC32(这是第一部分,因为我有 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

任何帮助将不胜感激。

提前致谢。

最佳成绩。

伊万

最佳答案

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

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

enter image description here

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

最好的问候,

伊万

关于c - IAR 链接器 CRC32 计算与 C(和其他网站)中计算的不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38346985/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com