Hallo junger Hirsch!
Ich habe für eine Frässteuerung folgendes gemacht:
Code:
'Fehlercodes
Const Error = 0
Const Ok = 1
Const Overflow = 2
'einen Ringspeicher definieren
Const Arraymax = 30
Dim Cmd(arraymax) As Byte
Dim Pakt As Byte , Pend As Byte, I As Byte
'den Ringspeicher initialisieren
Pend = 1
Pakt = 1
Pakt ist sowas wie ein Zeiger auf die aktuelle Position und Pend enthält den Index der letzten Position (die ja immer eine andere sein kann).
Beim Hinzufügen von Daten schreibe ich folgendes:
Code:
I = Pend + 1
If I > Arraymax Then I = 1
If I = Pakt Then
Printbin Overflow ; 'Fehlercode senden (Überlauf des Stacks)
Else 'kein Überlauf
Pend = I 'letzter Satz ist i
Cmd(pend) = Udr_byte(1) 'Das Kommando übergeben
Printbin Ok ;
End If
Ich sende also jedesmal eine Bestätigung, ob ein Kommando abgelegt werden konnte oder nicht. Wenn ich kein weiteres Kommando ablegen kann, weil der Ringspeicher voll ist, versuche ich solange zu senden, bis das Senden mit Ok bestätigt wird, also eigentlich ganz einfach.
Wichtig ist noch, dass beim Abarbeiten eines Kommandos der Zeiger Pakt erhöht wird, also:
Code:
Incr Pakt 'Zeiger auf aktuellen Satz erhöhen
If Pakt > Arraymax Then Pakt = 1 'wenn Überlauf, dann erneut beginnen
Kannst Du damit was anfangen?
Ich gebe zu, PicNicks Lösung ist schöner...
Ruppi
Lesezeichen