直接CRC和间接CRC之间的区别



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

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

我找不到的是:为什么这两种算法存在?有什么是一方能做而另一方不能做的吗?从用户的角度来看,它们是多余的吗?

UPDATE您可以在这里找到一个可测试的在线实现(以及两个算法的C实现)。然而,这些术语(或其中一个)在更多地方被提及。就像这里("直接表算法"),在微控制器参考文档中,在论坛等中。

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

CRC的数学定义是用n零位对消息进行划分。您可以通过在对消息进行操作之前而不是之后将其与CRC互斥来避免额外的操作。这需要通过CRC处理正常版本中寄存器的初始值,并将其作为新的初始值。

由于这是不必要的,您永远不会看到现实世界中的CRC算法进行额外的操作。

请参阅"10。您链接的文档中的"略微混乱的表驱动实现"可获得更详细的解释。

最新更新