Gast
#943711
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]);
}
}