2017-09-10 4 views
1

は、1-Wireでダラスcrc8を使って書かれたcrc計算機でいくつかのテストを行い、0x8cポリを使用しています。私は15バイトの文字列に1、2、3ビットのエラーを追加してテストしています(crc自体にもビットエラーを追加します)。貼り付け実装は、2ビットのエラー2を識別することができず、9、3ビットエラー...サポートCRK8実装のサポート

私は&を削除すると、値のデータを(しようとしているものは何でも精度の巨大な増加を引き起こす0x01のことに気づいたコードをいじる
static inline uint8_t roll(char input_byte, uint8_t crc) { 
    for(uint8_t i = 8; i; i--, input_byte >>= 1) { 
    uint8_t result = (crc^input_byte) & 0x01; 
    crc >>= 1; 
    if(result) crc ^= 0x8C; 
    } 
return crc; 
}; 


static inline uint8_t compute(const uint8_t *input_byte, uint16_t length) { 
    uint8_t crc = 0; 
    for(uint16_t b = 0; b < length; b++) 
    crc = roll(input_byte[b], crc); 
    return crc; 
}; 

文字列の異なる種類)と:私は範囲のために、常に100%の精度で何1、2または3ビットエラーを取得していない投稿を修正して

static inline uint8_t roll(char input_byte, uint8_t crc) { 
    for(uint8_t i = 8; i; i--, input_byte >>= 1) { 
    uint8_t result = crc^input_byte; 
    crc >>= 1; 
    if(result) crc ^= 0x8C; 
    } 
return crc; 
}; 


static inline uint8_t compute(const uint8_t *input_byte, uint16_t length) { 
    uint8_t crc = 0; 
    for(uint16_t b = 0; b < length; b++) 
    crc = roll(input_byte[b], crc); 
    return crc; 
}; 

私は0-15文字または0-120bits

である必要があります

誰かが私を助けてくれるの?ここで何が起こっているのか分かりませんか?

+0

'char'と' uint8_t' **は異なるタイプです**。一方は 'char'であり、他方が存在する場合は**' unsigned' ** charです。このアルゴリズムは、移植性のために**符号なし**文字を必要とします - > 'uint8_t input_byte' - –

+0

も、*すべての* 1ビットエラーについてテストしましたか? –

+0

タイプの提案Antiiをありがとう私は修正する:)この時点で私は私のテストが壊れていると思います。 –

答えて

0

私はあなたのテスト方法論に欠陥があると信じています。私のテストによると、元の実装では1,2,3ビットのエラーがすべて検出され、4ビットエラーの99.2%が検出されます。あなたの提案された選択肢は、ほぼ常に同じ結果(0xf7)を生成します。これは、crc^input_byteがほぼ常にゼロ以外の値になるために期待されます。確かに値0xf7を生成

static inline uint8_t compute(const uint8_t *input_byte, uint16_t length) { 
    uint8_t crc = 0; 
    for (int i = 0; i < 15; i++) { 
     for (int j = 0; j < 8; j++) { 
      crc >>= 1; 
      crc ^= 0x8C; 
     } 
    } 
    return crc; 
} 

したがって、あなたの実装がに(ほとんどの時間を)と同等です。

あなたのテストの欠陥は、crcのマッチが良いことだと仮定していると思います。逆に、元の文字列のcrcがビットエラーを注入した後にcrcと同じであれば、それは悪い(crcジェネレータはエラーを検出しなかった)。

+0

あなたは実行したテストをここに投稿するように頼むことができますか? –

関連する問題