Fürchte, da is nix zu machen.
Um wieviele Elemente geht es denn ?
Zeitkritische Sache ?
Fürchte, da is nix zu machen.
Um wieviele Elemente geht es denn ?
Zeitkritische Sache ?
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Hallo Picknick
Es ist ein String Array von etwa 100 Elemente die in eine ISR routine von der Seriellen Schnitstelle eingesammelt werden.
Nachdem die String Array Voll ist, teste ich die ersten 4 Zeichen, fals die nicht korrekt sind, dann stimmen die gesammelten Daten nicht und danach möchte ich diesen Array leeren. Da es anscheinend keinen Befehl in Bascom dafür existiert, werde es wahscheinlich so machen müssen.
dim zeichen as string * 100
for i = 1 to 100
zeichen(i) = ""
next
Gruss
Sato
Du sprachst anfangs von einem String-Array. Darauf bezog sich PicNicks Antwort.
Wenn du nur einen String der Länge 100 hast, brauchst du nur auf die erste Stelle ein Null-Byte zu schreiben, und schon ist der String leer. Die noch dahinter stehenden zeichen werden von allen String Funktionen ignoriert.
Dazu brauchst du nur Zeichen="" einzugeben.
Zeichen(i) = "" geht allerdings nicht. Dazu müsstest du ein Byte Array über den String legen. Dann kannst du jede Stelle direkt adressieren.Zitat von sato
Gruß
Rolf
Wozu überhaupt leeren? Die falschen Daten einfach nicht auszuwerten genügt doch, dafür reicht zb. eine Bit-Variable:mfgCode:Received_Nice_Data = 1 ... If Received_Nice_Data = 1 Then ' auswerten
Hallo Netzman
Hat Recht, wozu leeren, die werden sowieso überschrieben.
Danke
Gruss
Sato
Ein Versuch wäre folgendes wert:
dim zeichen(100) as string * 1
dim sleer as string *100 at zeichen overlay
zum leeren dann sleer=""
Falls das nicht geht würde ich eine long-Variable als Array im Overlay Dimensionieren, so brauchts dann nur noch 25 statt 100 Durchgänge beim auf 0 setzen.
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Geht zwar an der eigentlichen Frage vorbei, aber warum nicht. Nur:Zitat von peterfido
dim zeichen(100) as string * 1
belegt tatsächlich 200 Byte im SRAM (Null-Byte!), während
dim sleer as string *100 at zeichen overlay
nur die ersten 101 davon belegt.
sleer=""
setzt Zeichen(1)="" und sleer auf "", alles andere bleibt wie es ist.
Eine Long-Variable wird natürlich auch nicht in einem Befehl auf 0 gesetzt, sondern in 4 Byte Schritten. Ob eine Long auf 0 setzen schneller geht als einen String auf "" zu setzen, müsste man mal ausprobieren, glaube ich aber nicht.Zitat von peterfido
Außerdem brauchst du wieder 50 Long Variablen um die 200 String-Byte abzudecken.
Du setzt dabei am Ende 200 Byte auf 0. Wenn du ein Byte-Array drüberlegst und nur jedes zweite Byte - die wo die Zeichen des Strings liegen - auf 0 setzt, sind es halt nur 100 Zuweisungen.
Gruß
Rolf
Noch schneller gehts mit Memcopy, wie jemand im englischen Forum bemerkt hat
mfg
Lesezeichen