Hallo alle. Ich will zur Warung der Kommunikation in meinem LIN-Cluster eine Checksumme bilden und habe da mal ein paar Fragen. 1. Ist es richtig, daß ich alle zu sendenden Daten vom Slave auf addiere (inkl carry bit), anschließend invertiere und dann erst an den Master sende? 2. Wie kann ich unter GCC die Daten addieren, so daß das Carry-Bit mit addiert wird? (code?) Danke im voraus gruß Sticky
Machs einfacher! Sum = 0 Sum = Sum Xor Byte1 Sum = Sum Xor Byte2 Sum = Sum Xor Byte3 Sum = Sum Xor Byte4 Sum = Sum Xor Byte5 Sum = Sum Xor Byte6 Sum = Sum Xor Byte7 Fertig! So machts VW, Audi, BMW, etc, olee olee...
hätte ich vielleicht erwähnen sollen. will es als enhanced checksum. das was oben steht ist aber nicht komform mit der spezifikation ;)
Amir B-a wrote:
> das was oben steht ist aber nicht komform mit der spezifikation ;)
So wird aber in der Automobilindustrie gemacht. Funktioniert seit
Jahren! warum das Rad neu erfinden?
>Wie kann ich unter GCC die Daten addieren, so daß das Carry-Bit mit
addiert wird? (code?)
Ich mach das so: Alle Bytes in einer 16-bit Summe(!) aufaddieren.
Anschliessend das High-Byte (Carrys) des 16-bit Wertes zum Low-Byte
hinzuaddieren.
Auf einem 8-bitter (AVR) kann man die Summe auch in einem Byte ermitteln, also "unsigned char sum;". Wenn beim Aufaddieren der neue Wert kleiner als der Summand ist, gabs einen Überlauf. Dann muss das Ergebnis nochmals um 1 (Carry) erhöht werden. Wichtig ist, die Summe in unsigned zu berechnen, denn nur dafür ist der Überlauf in C definiert. Auf einem 16-bitter (MSR) addiert man natürlich besser in einer 16-Bit Variablen, wie oben beschrieben. RE
Alex W. wrote:
> warum das Rad neu erfinden?
tu ich ja nicht! ein Master (den ich nicht beeinflussen kann) sendet
nunmal Spzifikationskonform und mein Slave muss eine Checksumme senden,
die das Mastermodul versteht.
Harald wrote: > Ich mach das so: Alle Bytes in einer 16-bit Summe(!) aufaddieren. > Anschliessend das High-Byte (Carrys) des 16-bit Wertes zum Low-Byte > hinzuaddieren. Das hört sich gut an. Wie spreche ich unter GCC das Hgh-Byte einr Variablen an und wie das Low-Byte?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.