Bascom: serieller Datenempfang hängt sich auf

Gast #477615
Lesenswert?

Hallo,

ich hab ein Problem mit dem seriellen Datenempfang.

Ich empfange serielle Kommndos und muss diese im uC entsprechend 
auswerten.

Beipsiele:
<SET+X:043>    --> Speichern eines Parameters ins EEPROM
<EIN>          --> Der ADC Wandler soll eingeschaltet werden und sendet 
seine Werte über die RS232 an den PC

Vorgehensweise:
Wenn ich das Zeichen "<" empfange erzeuge ich einen Interrupt und setzte 
eine Variable auf null. In dieser Variable werden ab diesem Moment alle 
empfangenen Zeichen gespeichert und später mit einem vorgebenen String 
verglichen.

Nun kann es sein, dass der uC nicht mehr auf die Kommandos reagiert.



Vielen Dank schon mal im voraus.
#477994
Lesenswert?

Hallo Tester,

ich habe Dein Programm nicht ganz durchschaut, insbesondere da Du nur
einen Teil des Programms angehängt hast. Ich könnte mir aber vorstellen,
dass Dein Vorgehen mit dem Interrupt beim "<"-Zeichen zu Problemen 
führt.

Du modifizierst "Empfangene_daten" im Interrupt "Serial0charmatch:"
sowie in der Sub "Serieller_datenempfang()". Was passiert, wenn ein 
Interrupt auftritt während das Programm in der Sub ist? Das könnte Ärger 
machen.

Gruß
Gerd




Gast #477998
Lesenswert?

Warum empfängst du nicht einfach solange die Daten (und schreibst sie in 
einen Puffer), bis du ">" empfängst? Danach könnte man den Befehl dann 
auswerten.
Ich würde einen Rinpuffer verwenden und beim Empfang von ">" ein Flag 
setzen. Daraufhin würde ich den String seit des letzten ">"-Empfangs 
auswerten. Sobald der Lesezeiger beim ">" angekommen ist und der Befehl 
abgearbeitet wurde, wird auf den nächsten gewartet.
Gast #478424
Lesenswert?

Danke für die Antworten.

Ich hab mir schon so etwas wie mit dem Interrupt gedacht. Denn das 
Problem tritt nur auf, wenn ich innerhal kürzester Zeit mehrere 
Kommandos sende.

Die Lösung mit dem Rinpuffer finde ich gut. Ich werde sie auf alle Fälle 
mal ausprobieren. Denn hier bin ich mir sicher, dass das komplette 
Kommando gesendet sein müsste. Ich muss dann halt nur von hinten das 
Kommando asuwerten.


Gruß

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren