mikrocontroller.net

Forum: PC-Programmierung crc16 in qbasic berechnen


Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

seit einer Woche (am Feierabend) und dieses ganze Wochenende versuche 
ich einen Code in QBasic zu schreiben welcher mir eine CRC16 ermittelt, 
leider ohne Erfolg.
Ich übertrage ein Datenpaket (Header, Parameter, n-Daten, Prüfsumme und 
Paketendekennung) mittels serieller Schnittstelle (QBasic) an einen 
ATmega. Dafür muss ich die Prüfsumme ebenfalls übermitteln, damit komme 
ich nicht klar. Oder besser gesagt: Ich kann die Routine _crc16_update 
aus der Lib "util/crc16.h" nicht in QBasic umsetzten.
Das Problem wird wohl sein, dass QBasic keine uint16_t (unsigned int) 
kennt, ich bin mir ziemlich sicher das mit dem zweierkomplement zu tun 
hat. habe schon viel veruscht komme aber nicht drauf.

für einen Tip oder Denkanstoss wäre ich sehr dankbar.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte mehr Informationen geben.

>Das Problem wird wohl sein, dass QBasic keine uint16_t (unsigned int)
kennt,
Was läßt Dich das vermuten?

>ich bin mir ziemlich sicher das mit dem zweierkomplement zu tun
hat.
Was läßt Dich das vermuten?

Auf welche Stelle Deinem Code hast Du das Problem eingegrenzt?

Wo ist der Code?

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

mein Problem ist, folgenden C-Code in QBasic umzusetzen.

C-Code:

uint16_t crc16_update(uint16_t crc, uint8_t a)
  {
  int i;
  crc ^= a;
  for (i = 0; i < 8; ++i)
  {
  if (crc & 1)
    crc = (crc >> 1) ^ 0xA001;
  else
    crc = (crc >> 1);
  }
  return crc;
  }

QBasic-Code:

 crc& = crc& XOR a&
  FOR i0% = 0 TO 7
    IF (crc& AND 1) = 1 THEN
      crc& = sr(crc&, 1) XOR &HA001
    ELSE
      crc& = sr(crc&, 1)
    END IF
  NEXT i0%

sieht ja alles ganz simpel aus, geht aber leider nicht.

Autor: Ahem (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um mich mal selbst zu wiederholen:

>>Das Problem wird wohl sein, dass QBasic keine uint16_t (unsigned int)
>>kennt,
>Was läßt Dich das vermuten?

>>ich bin mir ziemlich sicher das mit dem zweierkomplement zu tun
>>hat.
>Was läßt Dich das vermuten?

>Auf welche Stelle Deinem Code hast Du das Problem eingegrenzt?

Autor: Hans-jürgen Herbert (hjherbert) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem liegt im Code für sr() Dort wird durch 2 geteilt. Dabei 
rundet QBASIC bei ungeraden Zahlen auf. 15/2 = 8 aber sr(&H0f,1) soll 7 
geben.

c: CRC-16 init=0 final=0 http://www.zorc.breitbandkatze.de/crc.html
d: CRC-16 after http://www.lammertbies.nl/comm/info/crc-calculation.html

crc& = &H0
a& = &H31

crc& = crc& XOR a&
PRINT "nach xor", HEX$(crc&)
FOR i0% = 0 TO 7
    IF (crc& AND 1) = 1 THEN
        crc& = ((crc& - 1) / 2&) XOR &HA001&
        PRINT "nach xor A001", HEX$(crc&)
    ELSE
        crc& = crc& / 2&
        PRINT "nach shift right", HEX$(crc&)
    END IF
NEXT i0%
PRINT "Ergebnis =", HEX$(crc&)


nach xor      31
nach xor A001 A019
nach xor A001 F00D
nach xor A001 D807
nach xor A001 CC02
nach shift right            6601
nach xor A001 9301
nach xor A001 E981
nach xor A001 D4C1
Ergebnis =    D4C1

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.