4

我正在使用具有硬件 CRC 计算单元的 ARM cortex M3 板。它支持 3 个标准 CRC 多项式。该模块的接口非常简单。我需要提供一个指向数据和数据长度的指针。我遇到的问题是它首先计算 LSB。我需要先知道 CRC Msb (xmodem crc16-itt)。有没有办法先把它得到的计算转换成msb?

4

3 回答 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 回答