Seite 5 von 6
Re: erste Schritte in Spin
Verfasst: So 16. Aug 2009, 19:40
von DJLinux
Ich hab ja ein Herz für Spiner
Grüsse Joshy
Code: Alles auswählen
PUB CRC16(ptr) | crc,n,c,i,j
crc := 0
n:=strsize(ptr)
repeat i from 1 to n
c := byte[ptr++] << 8
repeat j from 0 to 7
if ( (crc ^ c) & $8000 )
crc := (crc << 1) & $FFFF ^ $1021
else
crc := (crc << 1) & $FFFF
c := (c << 1) & $FFFF
return crc
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 17:13
von Julian
So ich bin vorhin mal wieder dazugekommen ein wenig zu spinen. Und natürlich hab ich gleich ein Problem. Die CRC wird in 2 Byte gesendet. Doch wie kann ich diese ausgeben ohne die Zahlenwerte zu addieren?
Code: Alles auswählen
PUB getcrc | crc
crc := ser.rx
crc += ser.rx
return crc
addiert die beiden zahlen. Doch sie sollten hintereinander geschrieben werden.
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 17:39
von Rainer
Julian hat geschrieben:So ich bin vorhin mal wieder dazugekommen ein wenig zu spinen. Und natürlich hab ich gleich ein Problem. Die CRC wird in 2 Byte gesendet. Doch wie kann ich diese ausgeben ohne die Zahlenwerte zu addieren?
Code: Alles auswählen
PUB getcrc | crc
crc := ser.rx
crc += ser.rx
return crc
addiert die beiden zahlen. Doch sie sollten hintereinander geschrieben werden.
Wie meinst Du das "hintereinander geschrieben werden" ?
zahl1 : 111
zahl2: 222
soll was werden ? 111222 ?
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 17:46
von Julian
genau das meine ich.
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 17:56
von BorgKönig
Julian hat geschrieben:So ich bin vorhin mal wieder dazugekommen ein wenig zu spinen. Und natürlich hab ich gleich ein Problem. Die CRC wird in 2 Byte gesendet. Doch wie kann ich diese ausgeben ohne die Zahlenwerte zu addieren?
Code: Alles auswählen
PUB getcrc | crc
crc := ser.rx
crc += ser.rx
return crc
addiert die beiden zahlen. Doch sie sollten hintereinander geschrieben werden.
Versuche mal, anstatt
+=,
.=. Sofern Spin paralelen zu C oder PHP benutzt, sollte
.= ein Zeichen an eine
Ausgabevariable anhängen.
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 18:04
von Julian
Funktioniert leider nicht. Genau genommen sind es 2 Hex Werte die aneinander gehängt werden sollen. Also z.B. aus zahl1 = CB und zahl2 = 3F wird CB3F
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 18:08
von Rainer
Probier mal links-shiften (ich nehme an das sind 2 x 8 bit Werte)
Code: Alles auswählen
PUB getcrc | crc, crc1, crc2
crc1 := ser.rx
crc2 := ser.rx
crc := crc1 <<8 + crc2
return crc
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 18:15
von Julian
Funktioniert wunderbar. Danke
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 18:20
von Rainer
Julian hat geschrieben:Funktioniert wunderbar. Danke
Gerne.
Wahrscheinlich kann man sich die 2 zusätzlichen lokalen Variablen auch sparen und einen Einzeiler schreiben .. aber mir ist zu warm zum denken
[EDIT]
Hmm .. so könnte es auch gehen .. keine Ahnung wo Spin beim Aufruf der Routinen das Ergebnis zwischenspeichert (wenn überhaupt)... müsste man ausprobieren.
Code: Alles auswählen
PUB getcrc | crc
crc := ser.rx <<8 + ser.rx
return crc
[/EDIT]
Re: erste Schritte in Spin
Verfasst: Di 18. Aug 2009, 18:34
von Julian
Und wieder mal ein Problem

(ja ich weiß ich nerve). Ich habe das Programm in 2 Spin Dateien gepackt. Eine als "Library" und eine wo das eigentliche Programm drin ist. Ich versuche nun einen Puffer zu übergeben. Die Funktion in der Library sieht so aus:
Code: Alles auswählen
PUB getpack128 | buffer[128],i
repeat i from 0 to 127
buffer[i] := ser.rx
return buffer
Dieser Code funktioniert wunderbar (habe mir die Hexwerte ausgeben lassen). Mein eigentliches Programm sieht so aus (wichtige stellen)
Code: Alles auswählen
VAR
BYTE BUFs[128]
[...]
BUFs := ymodem.getpack128
ios.sdopen("w",string("debug.txt"))
bwrite(@BUFs)
ios.sdclose
[...]
PUB bwrite(puffer) | n,i
repeat i from 0 to 127
n := byte[puffer][i]
ios.sdputc(n)
doch in der TXT ist nur das erste Byte richtig. Der Rest ist 00(hex)