erste Schritte in Spin

Fragen zu Programmiersprachen und Software für den Hive und die Propellerchips
DJLinux

Re: erste Schritte in Spin

Beitrag von DJLinux »

Ich hab ja ein Herz für Spiner :D

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
Julian
Beiträge: 136
Registriert: Mo 1. Jun 2009, 19:33

Re: erste Schritte in Spin

Beitrag 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.
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: erste Schritte in Spin

Beitrag 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 ?
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Julian
Beiträge: 136
Registriert: Mo 1. Jun 2009, 19:33

Re: erste Schritte in Spin

Beitrag von Julian »

genau das meine ich.
BorgKönig
Beiträge: 598
Registriert: So 24. Mai 2009, 11:24

Re: erste Schritte in Spin

Beitrag 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.
Julian
Beiträge: 136
Registriert: Mo 1. Jun 2009, 19:33

Re: erste Schritte in Spin

Beitrag 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
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: erste Schritte in Spin

Beitrag 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
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Julian
Beiträge: 136
Registriert: Mo 1. Jun 2009, 19:33

Re: erste Schritte in Spin

Beitrag von Julian »

Funktioniert wunderbar. Danke
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: erste Schritte in Spin

Beitrag 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]
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Julian
Beiträge: 136
Registriert: Mo 1. Jun 2009, 19:33

Re: erste Schritte in Spin

Beitrag von Julian »

Und wieder mal ein Problem :roll: (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)
Antworten