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.
 Thread beobachten
 Thread beobachten Seitenaufteilung abschalten
 Seitenaufteilung abschalten