Hallo,
danke für eure Hilfe.
@Falk danke für die Funktion. Mit dieser ist das Ergebnis über alle 9
Bytes 0. Auch mit deiner Variante mit den Nibbels. Was mich etwas
verwundert hat, das wenn ich es nur auf den ersten 8 Bytes anwende, dann
kommt eine andere CRC als die im 9. Byte vom Scratchpad raus. Ich hab
meine Funktion geändet und die Variante direkt vom Wiki für die CRC32
genommen. Mit dieser kommt bei den 9 Bytes auch 0 raus und bei 8 Bytes
der Wert der CRC im 9. Byte.
Ich hab einen Screenshot vom Inhalt des Arrays gemacht. Die Bytes 0 - 8
sind die vom Scratchpad.
Die Bytes 9 und 10 wurde mit folgender Funktion berechnet :
1 | uint8_t calc_forward_CRC8_LFSR(const char *data, uint8_t length)
|
2 | {
|
3 | reg = 0x0;
|
4 | poly = 0x8c;
|
5 | currentByte = 0x00;
|
6 | helper =0x00;
|
7 | for(;length>0;length--)
|
8 | {
|
9 | currentByte = *data++;
|
10 | for(int i=0; i<8; i++)
|
11 | {
|
12 | inputBit = currentByte & 0x01;
|
13 | currentByte = currentByte >> 1;
|
14 | //helper = ((reg & 0x01)^(inputBit))<<7;
|
15 | if ((reg & 0x01) != (inputBit))
|
16 | {
|
17 | reg = (reg>>1)^poly;
|
18 |
|
19 | }
|
20 | else
|
21 | {
|
22 | reg = reg >> 1;
|
23 |
|
24 | }
|
25 |
|
26 | }
|
27 | }
|
28 |
|
29 | return reg;
|
30 | }
|
Der Rest mit der von dir geschriebenen.
Mit deinenen Funktionen kann ich die CRC beliebiger Daten bestimmen und
prüfen , oder ? Die Variante mit den Nibbels sollte ja schneller gehen
als das Byteweise verarbeiten der Daten.
@ Jörg, ich verwende einen xMega128A1. Wo finde ich die Libc beim der
Toolchain wenn ich das Atmel Studio installiert habe ?
Gruß JackFrost