erste Schritte in Spin
Re: erste Schritte in Spin
hat sich erledigt
Zuletzt geändert von DJLinux am So 16. Aug 2009, 20:21, insgesamt 1-mal geändert.
Re: erste Schritte in Spin
Danke. Doch sowohl der code, als auch der mit der Tabelle liefern mir falsche Werte. Oh man so ein Mist mit diesem ..... CRC
Re: erste Schritte in Spin
Hast Du denn verstanden warum es immer größer wird?
Wenn Du ein Long Wert 32 bit immer wieder shiftest dann schiebst Du die bits nicht aus der Variable heraus wie bei einer 16 bit Word variable sondern der Wert wird immer größer.
wert := (wert << 1) & $FFFF ' nur 16 bit berücksichtigen
edit:
Durch die 16 bit Maske $FFFF kann der Wert nie größer werden als eine 16 bit Variable (ohne Vorzeichen)
Wenn Du ein Long Wert 32 bit immer wieder shiftest dann schiebst Du die bits nicht aus der Variable heraus wie bei einer 16 bit Word variable sondern der Wert wird immer größer.
wert := (wert << 1) & $FFFF ' nur 16 bit berücksichtigen
edit:
Durch die 16 bit Maske $FFFF kann der Wert nie größer werden als eine 16 bit Variable (ohne Vorzeichen)
Zuletzt geändert von DJLinux am So 16. Aug 2009, 15:50, insgesamt 1-mal geändert.
Re: erste Schritte in Spin
Nein so wirklich verstanden wie das funktioniert habe ich nicht. Ich werde mich da erstmal einlesen bevor ich mit dem CRC zeugs weitermache (mit bitweisen Operationen habe ich noch nie gearbeitet). Ich werde erstmal mein YMODEM Download soweit fertig schreiben, dass ich Pakete empfangen kann. Dann werde ich einfach mal die CRC Berechnung 1:1 aus dem YMODEM Upload den Reiner gepostet hat übernehmen und schaun was passiert.
Re: erste Schritte in Spin
Ich sehe Du hast doch ein "return crc & $FFFF" in Deinem Code
daher kann der CRC Rückgabewert gar nicht größer als 16 bit werden.
Der Fehler muss wo anders sein.
Grüsse Joshy
daher kann der CRC Rückgabewert gar nicht größer als 16 bit werden.
Der Fehler muss wo anders sein.
Grüsse Joshy
Re: erste Schritte in Spin
Was muss denn raus kommen für CRC bei "Hallo" 17071 ?
Zuletzt geändert von DJLinux am So 16. Aug 2009, 20:21, insgesamt 1-mal geändert.
Re: erste Schritte in Spin
Laut meinem Python Script 295. Ich habe das Script nur bei Paketen mit 128 bzw. 1024 Bytes getestet und da hat der CRC Wert mit dem von Hyperterminal gesendeten übereingestimmt. Hier kann man das Ganze online Berechnen lassen: (in diesem Fall "Hallo") http://www.lammertbies.nl/comm/info/crc ... thod=ascii
Der Wert muss mit "CRC-CCITT (XModem)" übereinstimmen.
Der Wert muss mit "CRC-CCITT (XModem)" übereinstimmen.
Re: erste Schritte in Spin
Das ist jetzt 1:1 übersetzt.
Werde damit glücklich
Werde damit glücklich

Code: Alles auswählen
' CRC16.spin
OBJ
ios: "ios"
num: "numbers"
CON
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
P_CCITT = $1021
VAR word wert,crc,c
PUB main
ios.start
ios.startram
ios.print(string("CRC16 Test"))
ios.printnl
wert :=calcrc(@str1)
ios.print(string("Ergebnis in dec = "))
ios.printdec(wert)
ios.printnl
ios.print(string("Ergebnis in hex = $"))
ios.printhex(wert,4)
ios.printnl
PUB calcrc(ptr) | i,j,count
crc := 0
count := strsize(ptr)-1
repeat i from 0 to count
c := byte[ptr][i]
c := c << 8
repeat j from 0 to 7
if ( (crc ^ c) & $8000 )
crc := (crc << 1) ^ P_CCITT
else
crc := crc << 1
c := c << 1
return crc
DAT
str1 byte "Hallo",0
Zuletzt geändert von DJLinux am So 16. Aug 2009, 20:22, insgesamt 1-mal geändert.
Re: erste Schritte in Spin
Oh ja das bin ich. Eine Sache noch: kann ich die variable "wert" irgendwie lokal definieren? Einfach "PUB main | word wert" geht nicht und "PUB main | wert" liefert merkwürdige Ergebnisse (allerdings nur als Dezimalzahl, die Hex stimmt). C und CRC lassen sich ohne Probleme Lokal definieren. Ich versuch einfach so gut wie möglich globale variablen zu vermeiden (hab ich schon immer so gemacht, ka ob das sinnvoll ist.).
Re: erste Schritte in Spin
Wenn Du lokal keine 16 Bit WORD variablen in Spin* verwenden kannst
dann must du wieder wert, crc und c an allen Stellen mit " & $FFFF" auf 16 bit reduzieren.
Den ganzen Quatsch kannst Du Dir aber mit 16 Bit WORD vars sparen.
*Ich möchte nicht in Spin programmieren aus dem Alter bin ich raus und spinnen kann ich auch ganz gut ohne HiVe
Grüsse Joshy
dann must du wieder wert, crc und c an allen Stellen mit " & $FFFF" auf 16 bit reduzieren.
Den ganzen Quatsch kannst Du Dir aber mit 16 Bit WORD vars sparen.
*Ich möchte nicht in Spin programmieren aus dem Alter bin ich raus und spinnen kann ich auch ganz gut ohne HiVe

Grüsse Joshy