Hallo, ich möchte eine Endlosschleife, die ich per RS232-String gestartet habe, auf diesem Weg auch anhalten können. Das habe ich schon probiert, ich kann die Schleife aber nicht stoppen; es scheint, daß die Variable, die ich als Abbruchkriterium definiert habe, garnicht aktualisiert wird, bzw. der µC, sobald er in der Schleife hängt, garnicht mehr ansprechbar ist. Obwohl ich der Meinung bin, daß der serielle Empfang mittels Interrupt funktioniert, aber ganz sicher bin ich mir nicht: Config Serialin = Buffered , Size = 10 , Bytematch = 13 Sub Serial0charmatch() Input Incoming_data Noecho I = 1 End Sub Außerhalb meiner Endlosschleife funktioniert es, nur mit dem Ausstieg daraus nicht. Hat jemand eine Idee ? Gruß Tilmann
Tilmann schrieb: > Obwohl ich der Meinung bin, daß der serielle Empfang mittels Interrupt > funktioniert, aber ganz sicher bin ich mir nicht: > > Config Serialin = Buffered , Size = 10 , Bytematch = 13 > > Sub Serial0charmatch() > Input Incoming_data Noecho > I = 1 > End Sub > > Außerhalb meiner Endlosschleife funktioniert es, nur mit dem Ausstieg > daraus nicht. Wundert mich, dass mit sowenig Code überhaupt was geht.
Mit so wenig Code geht wahrscheinlich nichts, es ist nur ein Ausschnitt, denn wenn ich hier alle 380 Zeilen reinstellen würde, hätte wahrscheinlich niemand Bock zu versuchen, Durchblick zu bekommen. Ist das überhaupt ein Interrupt, was ich da mache ? Wenn ich Interrupt nicht enable geht garnichts, daher vermute ich ... Übrigens habe ich jetzt unter "I=1" auf meine Abbruchbedingung geschrieben, seither bricht die Schleife zuverlässig ab, wenn ich den Befehl zum zweiten mal schicke. Warum erst beim zweiten mal ... ?
Tilmann schrieb: > Input Incoming_data Noecho Wenn ich mich nicht irre, ist Input blockierend... UART-RX in Bascom mache ich meist so:
1 | Onrxd: |
2 | Incr Rix 'Schreibposition im Array erhöhen |
3 | Rx_buf(rix) = Udr 'Empfangsbyte in Buffer legen |
4 | Return |
Die Mainloop kann dann prüfen, ob der String bereits komplett ist (Anzahl der bereits empfangenen und "eingekellerten" Bytes oder Wert des zuletzt empfangenen Bytes, z.B. 13 für CR) und zwischendurch auch andere Dinge tun, die nichtblockierend (abweisend) organisiert werden sollten. ...
Hallo Hannes, Dein Buffer ist ein normaler String, oder ? Übrigens funktioniert es bei mir inzwischen auch beim ersten mal. Ich hatte in die Schleife in der Subroutine noch eine extra-Anweisung drin, daß bei P=1 die Subroutine zu verlassen ist; diese habe ich rausgeworfen, denn der Wert für P war ja schon die Bedinung für die while-Schleife. Jetzt geht es so wie es soll. Leider habe ich nicht verstanden, warum das alles nicht gleich wollte ... Aber danke für Dein Beispiel mit dem Interrupt. Gruß Tilmann
Tilmann schrieb: > Dein Buffer ist ein normaler String, oder ? Nein, ist ein Array.
1 | Dim Rx_buf(10)as Byte 'Empfangsbuffer |
2 | Dim Rix As Byte 'RX-Index |
Kannst aber mittels Dim....Overlay auch einen String drüber legen. Das war bei mir aber nicht nötig, da das Telegramm aus mehreren Bytes und Words bestand, die separat extrahiert wurden. ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.