Hallo zusammen, ich habe für meine Bachelorarbeit ein Programm für die CRC8 Berechnung bekommen und kann es noch nicht ganz nachvollziehen.(Vor allem was die Tabelle zu bedeuten hat!) Hier ein Ausschnitt: int rticanmmcrc_capl(message * Msg,int CsBitPos,int CsLength) { int MsgLength = 0; int MsgID = 0; int kk = 0; int BytePos = 0; int CsBitRem = 0; byte CheckSum = 0; word xor_value = 0; byte CRC8_11D_LookUpTable[256] = { 0x00, 0x1d, 0x3a, 0x27, 0x74, 0x69, 0x4e, 0x53, 0xe8, 0xf5, 0xd2, 0xcf, 0x9c, 0x81, 0xa6, 0xbb, 0xcd, 0xd0, 0xf7, 0xea, 0xb9, 0xa4, 0x83, 0x9e, 0x25, 0x38, 0x1f, 0x02, 0x51, 0x4c, 0x6b, 0x76, 0x87, 0x9a, 0xbd, 0xa0, 0xf3, 0xee, 0xc9, 0xd4, 0x6f, 0x72, 0x55, 0x48, 0x1b, 0x06, 0x21, 0x3c, 0x4a, 0x57, 0x70, 0x6d, 0x3e, 0x23, 0x04, 0x19, 0xa2, 0xbf, 0x98, 0x85, 0xd6, 0xcb, 0xec, 0xf1, 0x13, 0x0e, 0x29, 0x34, 0x67, 0x7a, 0x5d, 0x40, 0xfb, 0xe6, 0xc1, 0xdc, 0x8f, 0x92, 0xb5, 0xa8, 0xde, 0xc3, 0xe4, 0xf9, 0xaa, 0xb7, 0x90, 0x8d, 0x36, 0x2b, 0x0c, 0x11, 0x42, 0x5f, 0x78, 0x65, 0x94, 0x89, 0xae, 0xb3, 0xe0, 0xfd, 0xda, 0xc7, 0x7c, 0x61, 0x46, 0x5b, 0x08, 0x15, 0x32, 0x2f, 0x59, 0x44, 0x63, 0x7e, 0x2d, 0x30, 0x17, 0x0a, 0xb1, 0xac, 0x8b, 0x96, 0xc5, 0xd8, 0xff, 0xe2, 0x26, 0x3b, 0x1c, 0x01, 0x52, 0x4f, 0x68, 0x75, 0xce, 0xd3, 0xf4, 0xe9, 0xba, 0xa7, 0x80, 0x9d, 0xeb, 0xf6, 0xd1, 0xcc, 0x9f, 0x82, 0xa5, 0xb8, 0x03, 0x1e, 0x39, 0x24, 0x77, 0x6a, 0x4d, 0x50, 0xa1, 0xbc, 0x9b, 0x86, 0xd5, 0xc8, 0xef, 0xf2, 0x49, 0x54, 0x73, 0x6e, 0x3d, 0x20, 0x07, 0x1a, 0x6c, 0x71, 0x56, 0x4b, 0x18, 0x05, 0x22, 0x3f, 0x84, 0x99, 0xbe, 0xa3, 0xf0, 0xed, 0xca, 0xd7, 0x35, 0x28, 0x0f, 0x12, 0x41, 0x5c, 0x7b, 0x66, 0xdd, 0xc0, 0xe7, 0xfa, 0xa9, 0xb4, 0x93, 0x8e, 0xf8, 0xe5, 0xc2, 0xdf, 0x8c, 0x91, 0xb6, 0xab, 0x10, 0x0d, 0x2a, 0x37, 0x64, 0x79, 0x5e, 0x43, 0xb2, 0xaf, 0x88, 0x95, 0xc6, 0xdb, 0xfc, 0xe1, 0x5a, 0x47, 0x60, 0x7d, 0x2e, 0x33, 0x14, 0x09, 0x7f, 0x62, 0x45, 0x58, 0x0b, 0x16, 0x31, 0x2c, 0x97, 0x8a, 0xad, 0xb0, 0xe3, 0xfe, 0xd9, 0xc4 }; MsgLength = Msg.dlc; MsgID = Msg.ID; CsBitRem = (CsBitPos % 8); BytePos = (CsBitPos - CsBitRem) / 8; switch (MsgID) { case 0x3C: {xor_value = 197;}; break; //CRC_CON_VEH case 0x1CA: {xor_value = 116;}; break; //CRC_CTR_CNV_48V_2 default: {return(-1);} } CheckSum = CRC8_11D_LookUpTable[(byte)(xor_value & 0x00ff)]; CheckSum = CRC8_11D_LookUpTable[CheckSum ^ (byte)(xor_value>>8)]; for (kk=0; kk<MsgLength; kk++) { if(kk != BytePos) { CheckSum = CRC8_11D_LookUpTable[CheckSum ^ (byte)(Msg.BYTE(kk))]; } } return(CheckSum); // Return of CRC (TX) } Wäre super wenn mir jemand helfen könnte, verstehe noch nicht wie das Generatorpolynom zustande kommt und wo ich es finde. LG
:
Verschoben durch Moderator
Michael H. schrieb: > Wäre super wenn mir jemand helfen könnte, verstehe noch nicht wie das > Generatorpolynom zustande kommt Du willst den akademischen Grad eines Bachelors erwerben und stellst hier eine DERARTIGE Frage? Eigentlich soll so eine Arbeit dokumentieren, daß derjenige, der sie einreicht, in der Lage ist, selbständig und wissenschaftlich zu arbeiten und seine Ergebnisse selbst erzielt zu haben. Was meinst du, was aus dir werden mag, wenn du derartig in einer Firma einen Posten als Entwickler oder Konstrukteur etc. annimmst? W.S.
Ja, ich will den akademischen Grad eines Bachelors erwerben und ja, ich stelle hier eine "DERARTIGE" Frage! Ich gebe Ihnen vollkommen Recht, dass eine Arbeit eigenständig geschrieben werden muss. Des weiteren gebe ich Ihnen Recht, dass man seine Ergebnisse selbst erzielen muss. Aber um diese Ziele zu erreichen, ist es dennoch vollkommen legitim, sich Tipps, Anregungen oder Meinungen anderer zu holen. Sei es von anderen Personen/Experten, oder im übertragenen Sinne von Fachliteratur. Falls Sie wirklich allen Ernstes glauben, dass das niemand macht, der den akademischen Grad eines Bachelors erwerben will, dann muss ich Sie enttäuschen. Hier werden Sie keine gute Arbeit finden. Des weiteren werden Sie keinen erfolgreichen Entwickler/Konstrukteur finden, der seine Kollegen nicht beim Namen kennt. ;) Ich will aber hier keine tiefere Diskussion führen, denn das bringt mich tatsächlich nicht weiter. Falls Sie mir also dennoch helfen wollen, würde ich mich freuen! Beste Grüße
Michael H. schrieb: > (Vor allem was die Tabelle zu bedeuten hat!) Sie heißt "CRC8_11D_LookUpTable", und was eine Lookup-Tabelle ist, weißt Du ja hoffentlich. Eine CRC berechnet man "eigentlich" bitweise, was dann aber pro Datenbyte 8 Schritte erfordert. Um, ein ganzes Datenbyte auf einmal durchzuziehen, nimmt man eine Lookup-Tabelle. Damit Du auch ein wenig selbständig arbeiten kannst, lies Dir erstmal den Wikipedia-Artikel zum Thema CRC durch. Danach gehst Du zu https://create.stephan-brumme.com/crc32/ , was zwar für CRC32 ist, aber das Prinzip ist dasselbe. Da findest Du auch Code, um die Lookuptabelle für CRC32 zu generieren. Dann schaust Du, wo Du das Generatorpolynom für CRC32 in der Lookuptabelle wiederfindest, und wo der daher analog dazu in Deiner Tabelle ist. Das ist allerdings in der "reversed" Form, weil die Bits gerade andersrum reingeschoben werden, d.h. für das eigentliche Generatorpolynom brauchst Du davon die bitgespiegelte Form. Das x^8 ist dabei logischerweise nicht vorhanden, das ist implizit.
Nop schrieb: > Danach gehst Du zu https://create.stephan-brumme.com/crc32/ , was zwar > für CRC32 ist, aber das Prinzip ist dasselbe. > > Da findest Du auch Code, um die Lookuptabelle für CRC32 zu generieren. > Dann schaust Du, wo Du das Generatorpolynom für CRC32 in der > Lookuptabelle wiederfindest, und wo der daher analog dazu in Deiner > Tabelle ist Äh, hier gibt's das Ding komplett und Original https://www.google.com/search?q=painless+guide+to+crc Und dann ein paar Testvektoren vom AUTOSAR Konsortium https://www.google.com/search?q=autosar+crc Hab das für Arbeit auch einmal in CAPL und embedded C gießen müssen. Viel Erfolg damit.
Danke für die Antworten, was ich allerdings noch nicht verstehe ist, warum hier: Michael H. schrieb: > switch (MsgID) > { > > case 0x3C: {xor_value = 197;}; break; //CRC_CON_VEH > case 0x1CA: {xor_value = 116;}; break; //CRC_CTR_CNV_48V_2 > > default: {return(-1);} xor_value so gewählt wird. Normalerweise wird doch der ID direkt für die Berechnung benutzt, oder?
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.