单片机/MCU论坛
直播中

刘燕

7年用户 1312经验值
私信 关注

如何使用内在函数 __crc32 (uint32b、uint32a)?

我正在使用 Tasking 编译器,有一个内部函数调用 __crc32(uint32 b,uint32 a)参见下文 Tasking 用户手册

我很困惑的是参数 uint32 b,我做了一些测试,如果 b = 0x0000000,我就能从给定的参数 a 中得到正确的 crc 返回值。
例如
b = 0x00000000
a = 0x12345678
__crc32 (b, a) 返回值是 0x4a090e98,这是正确的(我用一些 crc 计算器仔细检查了一下)
但是,一旦我给了 b 任何其他值,我就无法再有预期的 crc 返回值了。

参数 b 到底代表什么?
                                                                                                                                                                                                                                                                                                                                                                                          

回帖(2)

李森

2024-1-25 14:21:44
初始种子值始终为零。 如果这种情况发生变化,它将不起到初始种子值的作用。 就像你说的那样,如果你尝试 a = 0x12345678 和 b = 0,你会得到 0x4a09e98,但假设你想要 a = 0x1234567887654321,你将无法使用它,因为该函数只能获得 uint32 值或 32 位值。 要获得 crc,你需要先做 a1= 0x12345678 和 b = 0,然后使用由此得出的结果作为 b,a2 = 0x87654321。
结果 = __crc32 (0x0, 0x12345678);
结果 = 0x4a090e98
extResult = __crc32(结果,0x87654321);
extResult = 0xbd4aa34B
举报

胡秋阳

2024-1-26 09:55:00
根据您提供的信息,参数 `uint32 b` 是 `__crc32` 函数的输入参数,但具体代表什么取决于使用情境和编译器的实现。在您的情况下,当 `b` 的值为 0x00000000 时,您可以得到正确的 CRC 返回值。然而,如果 `b` 的值为其他值,则无法得到预期的结果。

为了解决这个问题,您可以查阅 Tasking 编译器的用户手册,以了解关于 `__crc32` 函数的更多详细信息。用户手册中可能对这个函数的参数有更具体的说明和使用说明。

此外,您还可以考虑尝试使用其他的 CRC 算法或库,以获得正确的结果。您可以在互联网上寻找常用的 CRC 算法实现或库,并根据您的需求进行选择和集成。

如果您对编码中使用的库函数或编译器的内部函数仍然感到困惑,建议您与 Tasking 编译器的技术支持团队联系,以获得更具体的指导和解决方案。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分