我正在使用具有硬件 CRC 计算单元的 ARM cortex M3 板。它支持 3 个标准 CRC 多项式。该模块的接口非常简单。我需要提供一个指向数据和数据长度的指针。我遇到的问题是它首先计算 LSB。我需要先知道 CRC Msb (xmodem crc16-itt)。有没有办法先把它得到的计算转换成msb?
问问题
2471 次
3 回答
2
编辑/重写:
根据提供的信息,我认为您有以下选择:
1)在主机上安排数据(假设它不像微控制器那样受资源限制),这样微控制器就不必做太多的工作。
2)尽可能使用功能/指令制作数据的(字节交换)副本以使其更快,然后让硬件CRC引擎计算crc。
3)不要使用硬件crc引擎,使用软件计算crc。
4)忽略CRC。
5)使用不同的微控制器(可以处理这个用例)。
于 2012-05-01T03:36:16.023 回答
0
[...]我首先需要知道 CRC Msb (xmodem crc16-itt)。有没有办法先把它得到的计算转换成msb?
xmodem crc16-itt 将字节作为数据进行操作。因此,最高有效字节优先或最低有效字节优先仅与 CRC 值的表示有关。只需交换计算值 - 例如使用__REV16()
CMSIS 函数。
编辑:
我假设双方都0x01 0x02 0x03 0x04
这么认为。如果一侧看到不同的字节,例如0x04 0x03 0x02 0x01
在内存中,则 CRC 将失败。但无论如何,您可能希望尽快解决这个问题,因为这会让您在处理数据时非常头疼。
于 2012-05-01T13:55:12.103 回答
-1
只需像这样交换 2 个字节:
unsigned short crc_little_endian = ...; // call to your CRC function
unsigned short crc_big_endian = (crc_little_endian >> 8) | (crc_little_endian << 8);
于 2012-04-30T17:14:28.013 回答