我正在使用具有本机HW功能的微控制器来计算来自内存块的CRC32哈希值,其中多项式可以自由定义。事实证明,系统具有不同的CRC数据链路,如16位和8位,我打算使用硬件引擎。
在online tools的简单测试中,我得出结论,有可能找到一个与8位CRC具有相同结果的32位多项式,例如:
因此,用零填充多边形并右移结果似乎有效。 但是,总是可以找到一组使32位引擎能够用作16位或8位引脚的参数吗? (包括poly,final xor,init val和inversions)
提供更多上下文并防止“绕过答案”,例如“不要使用本机引擎”:我在安全关键系统中有一个场景,必须防止常见的设计错误传播到冗余处理节点。其中一个解决方案是在一个节点中进行基于软件的CRC计算,在其中使用基于硬件的计算。
答案 0 :(得分:2)
是的,您正在做的事情通常适用于未反映的CRC。使用硬件指令循环周围的代码可以非常简单地完成前置和后置调节。
假设硬件CRC没有这个选项,要做反射CRC,你需要反映每个输入字节,然后反映最终结果。这可能会破坏使用硬件CRC的目的。 (虽然如果你的目的只是为了实现不同的实现,那么也许它不会。)