直接和间接CRC之间的差异

时间:2016-04-29 20:41:40

标签: algorithm crc

我见过两种不同的CRC算法。一种称为“直接”,另一种称为“非直接”或“间接”。两者的代码有点不同。如果直接类型提供了转换的初始值,则两者都能够计算相同的校验和。

我可以成功运行两种算法,但我知道如何转换初始值。所以这没问题。

我无法找到:为什么存在这两种算法?是否有人能做到对方不能做的事情?从用户的角度来看,它们是多余的吗?

更新您可以找到可测试的在线实现(以及两个算法的C实现)here。然而,在更多地方提到了这些术语(或其中之一)。与here(“直接表格算法”)一样,在微控制器参考文档中,在论坛等中。

1 个答案:

答案 0 :(得分:1)

“direct”指的是如何避免在 n 位CRC的末尾处理 n 零位。

CRC的数学定义是消息的一个除法,其中附加了 n 零比特。您可以通过使用CRC对消息进行异或操作来避免额外操作,然后再对其进行操作。这需要通过CRC处理正常版本中寄存器的初始值,并将其作为新的初始值。

由于没有必要,你永远不会看到真正的CRC算法进行额外的操作。

请参阅您链接的文档中的“10.稍微松散的表驱动实现”部分,以获得更详细的说明。