mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mein CRC16 funktioniert nicht?


Autor: gastarbeiter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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]);
  }

}

Autor: 3370 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist Singlesteppen als Debug massnahme zu kompliziert ?

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"funktioniert nicht" ist als Fehlermeldung auch maximal unausreichend.


PS: Mein Antigravitationsgenerator funktioniert auch nicht, weiß auch 
grad nicht wrum. Wer kann helfen?

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>"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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.