unsigned short crc16(signed int16 *daten, unsigned int datenLaenge) { unsigned short const g=0x8005; unsigned short crc_wert = 0x00; unsigned short d, i, k; for (i=0; i<datenLaenge; i++) { d = *daten++ << 8; for (k=0; k<8; k++) { if ((crc_wert ^ d) & 0x8000) crc_wert= (crc_wert << 1) ^ g; else crc_wert = (crc_wert << 1); d <<= 1; } } return(crc_wert); } ich lasse ihn über das array "eingepackte_daten" (siehe unten) laufen und packe den crcwert am ende meines arrays wieder ein. funktioniert aber nicht?????? keine ahnung warum... #include "CRC.c" #define STX 0x02 #define ETX 0x03 #define ESC 0x1B #define $ 0x24 /*Trennzeichen*/ signed int16 daten_einrahmen(signed int16 *eingepackte_daten[], unsigned int eingepackte_daten_l) { unsigned short crc=0; unsigned int i = 0; unsigned int j = 0; unsigned int z = 0; unsigned int rohdaten_l = 9; // unsigned int eingepackte_daten_l; // signed int16 eingepackte_daten[15]; unsigned int16 speed=0x95; unsigned int16 height=0x96; unsigned int16 direction=0x97; signed int16 roll=0x98; signed int16 pitch=0x99; signed int16 rohdaten[9]; setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_psp(PSP_DISABLED); setup_spi(FALSE); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); setup_timer_1(T1_DISABLED); setup_timer_2(T2_DISABLED,0,1); for(z=0; z<=14; z++){ eingepackte_daten[z]='\0'; } eingepackte_daten[0] = ESC; eingepackte_daten[1] = STX; rohdaten[0] = speed; rohdaten[1] = 0x24; rohdaten[2] = height; rohdaten[3] = 0x24; rohdaten[4] = direction; rohdaten[5] = 0x24; rohdaten[6] = roll; rohdaten[7] = 0x24; rohdaten[8] = pitch; j = 2; for(i=0; i< 9; i++){ if(rohdaten[i] == ESC){ eingepackte_daten[i+j] = ESC; j++; eingepackte_daten[i+j] = ESC; /*Und füge auch in die nächste Stelle ein ESC ein*/ } else eingepackte_daten[i+j] = rohdaten[i]; } eingepackte_daten[i+j] = ESC; /*CRC,ESC und ETX werden am Ende des Arrays eingefügt*/ eingepackte_daten[i+j+1]= ETX; eingepackte_daten_l=i+j+2; /* Berechnung der Länge der Daten*/ crc = crc16(eingepackte_daten,eingepackte_daten_l); eingepackte_daten[i+j+2]= crc; /*Füge mein CRC in mein Array*/ eingepackte_daten_l=i+j+3; /*Berechnung der entgültigen Länge*/ printf("rohdatenLänge: %i\n\r",rohdaten_l); printf("längeEingepackt: %i\n\r",eingepackte_daten_l); for(z=0;z<=14;z++){ /*Gebe Array aus*/ printf("%i:\ %x\n\r",z,eingepackte_daten[z]); } }
"funktioniert nicht" ist als Fehlermeldung auch maximal unausreichend. PS: Mein Antigravitationsgenerator funktioniert auch nicht, weiß auch grad nicht wrum. Wer kann helfen?
>>"funktioniert nicht" ist als Fehlermeldung auch maximal unausreichend. >>PS: Mein Antigravitationsgenerator funktioniert auch nicht, weiß auch >>grad nicht wrum. Wer kann helfen? Wegstaben, Stimmt genau. Allerdings darfst Du hier keine sarkastisch oder satirisch formulierte Kritik an den wie immer unzureichenden Infos des OP üben. Kann gut sein, das Du gleich von einem der Gutmenschen hier ausgebuht oder schriftlich abgemahnt wirst. Immer daran denken, 90% der Besserwisser hier sind Sozialpädagogen, die erstmal darüber reden wollen und ausserdem darf man dem armen Jungen nicht so direkt sagen, dass er sich seine Frage zu leicht gemacht hat. Joche Müller
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.