4

ハードウェアCRC計算ユニットを備えたARMcortexM3ボードを使用しています。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

[...]最初にCRCMsbを知る必要があります(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 に答える