は、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
である必要があります誰かが私を助けてくれるの?ここで何が起こっているのか分かりませんか?
'char'と' uint8_t' **は異なるタイプです**。一方は 'char'であり、他方が存在する場合は**' unsigned' ** charです。このアルゴリズムは、移植性のために**符号なし**文字を必要とします - > 'uint8_t input_byte' - –
も、*すべての* 1ビットエラーについてテストしましたか? –
タイプの提案Antiiをありがとう私は修正する:)この時点で私は私のテストが壊れていると思います。 –