COM Port bereinigen
-
Hi Leute!
Ich habe ein Problem mit verbleibenden Zeichen im Puffer des COM Ports. Ich lese ihn zeichenweise aus und verarbeite die Daten. Ich warte also auf den nächsten Datensatz und versuche vom Com Port zu lesen. Eigentlich müsste er leer sein, aber da befindet sich vom letzten Vorgang noch das letzte Zeichen drin. wie bekomme ich das weg. Ich suche also nach einem Pendant für flushall() . Ist die Funktion schon dafür geeignet?
Danke, Ranger
-
Wie greifst du überhaupt auf die serielle Schnittstelle zu??
-
ich nutze
inportb(3F8);
-
Was liefert inportb() zurück, wenn nichts geliefert wird? (Müsste normalerweise 0 sein) Du könntest also solange was einlesen, bis 0 kommt.
Schau dir vielleicht auch mal das hier an ;):
http://www.c-plusplus.net/forum/viewtopic.php?t=45173
-
Ich Danke Dir erstmal, aber leider hab ich das mit der Null berücksichtigt, ich lese ja so lange bis da 0 steht. Mein Problem ist nun, es steht nicht Null drin, weil der letzte übertragene Buchstabe immer weiter im Speicher bleibt, ich poste mal hier den Auszug um den es geht:
while((i <= 9)&& (fehler <= 50)) //Teständerung { temp=inportb(port); if(temp == 0)fehler++; if(((temp >= 48) && (temp <= 58)) || ((temp >= 65) && (temp <= 70))) { array[i] = temp; i++; } temp = 2; } if(i == 10) { array[10] = 0; } else { strcpy(array,"FFFFFFFFFF"); }
Den anderen Artikel hab ich auch schon durch, aber der verrät mir nicht, was falsch ist.
Als Beispiel mal folgendes:Ich übertrage "1234567890", alles klappt und ich freu mich, aberich sende nicht weiter und lese die nächsten 10 Zeichen ein, das sieht dann so aus:
"0000000000" --> Das letzte Zeichen der vorherigen Übertragung bleibt beständig am Port.
Danke, Ranger
-
Hmmm find ich aber sehr seltsam. Kann mir eigentlich nicht vorstellen, dass das letzte Zeichen noch am Port gelesen wird. Das Problem muss eher am Buffer liegen. Aus welchem Include ist inportb()? Und wie lautet die Dokumentation dazu?
Versuch mal die Sachen von dem Thread, den ich dir geschrieben hab, zu verwenden.
-
Hi AJ, ich hab ne ganz böse Vermutung, bin da schonmal reingefallen. Ich versuch gerade das Proggy auf ne DOS Mühle zu legen. Ich arbeite bis jetzt unter der Konsole von Win2000. Da hat auch die Funktion difftime() fehler, im gegensatz zu realem DOS.
Also die Funktion inportb() ist in der dos.h included, da kann das wirklich an der inkompatibilität liegen, aber das teste ich noch.
ich meld mich, wenn ich mehr weis.
Gruß Ranger
-
Hi AJ!
Meine Vermutung hat sich bestätigt, ich habe das ganze auf einer DOS - Maschine laufen und es geht. Es lag also an der emulierten DOS-BOX.
Trotzdem vielen Dank.