Hallo
Kann mich jemandem helfen, ich habe ein problem mit CRC-16 Berechnung.
Ich verwende den gleichen C Code auf meinem uC (Renesas H8) sowie auf
dem PC um die CRC zu berechnen, das Problem ist, dass ich nicht den
geleichen Resulat erhalte!
Hier mein Code:
1 | //! CRC value updated by crc_update_crc16_f()
|
2 | static uint16_t mod_crc_value = 0x1D0F;
|
3 |
|
4 | /************************************************************************************/
|
5 | void crc_reset_crc16_f(void)
|
6 | {
|
7 | mod_crc_value = 0x1D0F;
|
8 | }
|
9 |
|
10 | /************************************************************************************/
|
11 | uint16_t crc_update_crc16_f(uint8_t const data_to_add)
|
12 | {
|
13 | mod_crc_value = (mod_crc_value >> 8) | (mod_crc_value << 8);
|
14 | mod_crc_value ^= data_to_add;
|
15 | mod_crc_value ^= (mod_crc_value & 0xff) >> 4;
|
16 | mod_crc_value ^= mod_crc_value << 12;
|
17 | mod_crc_value ^= (mod_crc_value & 0xff) << 5;
|
18 |
|
19 | return (mod_crc_value);
|
20 | }
|
21 |
|
22 | /************************************************************************************/
|
23 | uint16_t crc_get_crc16_f(uint8_t const data[], uint16_t nb_bytes)
|
24 | {
|
25 | uint16_t bytes_counter;
|
26 |
|
27 | crc_reset_crc16_f();
|
28 | for(bytes_counter = 0; bytes_counter < nb_bytes; bytes_counter++)
|
29 | {
|
30 | crc_update_crc16_f(data[bytes_counter]);
|
31 | }
|
32 |
|
33 | return (mod_crc_value);
|
34 | }
|
Ich nehme and, dass es mit big/little endian zu tun hat, aber ich finde
die Lösung nicht.
Danke für eure Hilfe!