我正在使用一块带有硬件CRC计算单元的ARM Cortex M3开发板。它支持3种标准CRC多项式。该模块的接口非常简单。我需要提供指向数据和数据长度的指针。我的问题是它按照LSB(最低位优先)计算。而我需要知道CRC Msb first(xmodem crc16-itt)。有没有办法将它得到的计算结果转换为Msb first?
我正在使用一块带有硬件CRC计算单元的ARM Cortex M3开发板。它支持3种标准CRC多项式。该模块的接口非常简单。我需要提供指向数据和数据长度的指针。我的问题是它按照LSB(最低位优先)计算。而我需要知道CRC Msb first(xmodem crc16-itt)。有没有办法将它得到的计算结果转换为Msb first?
编辑/改写:
根据提供的信息,我认为您有以下几个选择:
1)在主机上排列数据(假设主机不像微控制器那样受资源限制),以便微控制器的工作量较少。
2)使用可能使其更快的特性/指令制作(字节交换)数据的副本,然后让硬件CRC引擎计算CRC。
3)不使用硬件CRC引擎,使用软件计算CRC。
4)忽略CRC。
5)使用不同的微控制器(可以处理此用例)。
只需像这样交换2个字节:
unsigned short crc_little_endian = ...; // call to your CRC function
unsigned short crc_big_endian = (crc_little_endian >> 8) | (crc_little_endian << 8);