Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.07.2006, 23:44

[erledigt] flush COM

Hallo!

Ich such eine möglichkeit den Inhalt des Buffers einer COM-Schnitstelle zu leeren. Momentan kann ich nur ein Byte auslesen. Im Prinzip würd es ja reichen, wenn ich weiß wie viele Bytes noch im Buffer liegen.

Ich hab meine Serial-Kommunikation nach dem tutorial auf winapi.net aufgebaut.

mfg,
Rhodan

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

07.07.2006, 23:52

was willst du jetzt wissen? wie groß der buffer ist, oder wie man speicher auf 0 setzt?

Größe des Buffers: sizeof();
Setzen auf null: zeromemory();

3

08.07.2006, 00:03

Ui.. eine so schnelle Antwort?! Schön :)

Also was ich eigentlich wissen will. Wie komm ich an den Buffer meiner COM-Schnitstelle. Die beiden Funktionen die du anführst kann ich ja nur verwenden wenn ich den Buffer habe - den hab ich aber nicht ;) Und genau das ist mein Problem.

Achja, ich verwende C++.

mfg,
Rhodan

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

08.07.2006, 09:13

Zitat von »"Firefly"«

was willst du jetzt wissen? wie groß der buffer ist, oder wie man speicher auf 0 setzt?

Größe des Buffers: sizeof();
Setzen auf null: zeromemory();

Sorry, aber vielleicht solltest du die Frage mal lesen, bevor du antwortest.
Deine Antwort ist nicht nur falsch, sondern passt auch überhaupt nicht zum Thema.

Zur Frage: Kannst du nicht einfach so viele Bytes lesen (und wegschmeißen), bis nichts mehr da ist? Dann sollte der Puffer doch leer sein. Oder blockiert der Aufruf von Read, wenn keine Daten da sind?

rklaffehn

Treue Seele

Beiträge: 267

Wohnort: Braunschweig

  • Private Nachricht senden

5

08.07.2006, 09:37

Das Tut auf winapi.net benutzt ReadFile um von der COM Schnittstelle zu lesen.

Auf den ersten Blick habe ich nichts davon gesehen, dass dieser Aufruf blockiert, wenn keine Daten vorliegen, sondern er sollte einfach "0 Bytes gelesen" zurückmelden. Also sollte Davids Vorschlag funktionieren.

Aber evtl. kann da einer der WinAPI Cracks mehr Erleuchtung bringen. :)

Gruss,
Rainer
God is real... unless declared integer.
http://www.boincstats.com/signature/user_967277_banner.gif

6

08.07.2006, 10:40

Hallo!

Wenn ich ein Byte lesen will, aber der Buffer leer ist, blockiert die Methode für einige Sekunden. Darum such ich z.B. eine Methode mit der ich die Anzahl der Bytes im Buffer ermitteln kann. Denn erst dann kann ich David Scherfgens Vorschlag wirklich umsetzen.

Momentan steuere ich das STM noch via VBA und Excel. Da verwende ich das MSComm-Modul. Ich werd jetzt erstmal versuchen das Modul mit C++ anzuspechen.

Falls jemand noch eine Idee oder einen Tip hat, bitte posten! :D

mfg,
Rhodan

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

08.07.2006, 10:49

ReadFileEx:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/readfileex.asp

Diese Funktion liest asynchron, blockiert also nicht.
Schau dir das mal an.

8

08.07.2006, 20:04

@ David Scherfgen:
Danke! Das würde im Prinzip funktionieren! Nur leider hab ich einen exclusiven (nicht OVERLAPPED) Zugriff auf die Schnitstelle. Darum funktioniert diese Methode nicht.

Ich hab jetzt nochmal ein bissel im Netzt recherchiert und bin zu der Erkentniss gekommen, das das nur über das auslesen aller bytes mit anschließendem "wegwerfen" funktionieren wird. Also im Grunde genau so wie Scherfgen es vorgeschlagen hat.
Dafür muss ich aber an die Anzahl der Bytes im Buffer kommen. Nur wie?

Wenn jemand weitere Ideen hat, unbedingt posten!

mfg,
Rhodan

9

08.07.2006, 20:23

http://msdn.microsoft.com/library/defaul…e/purgecomm.asp

Es ist ganz einfach :)
Man kann den input-Buffer wiefolgt leeren:

C-/C++-Quelltext

1
PurgeComm(hComm, PURGE_RXCLEAR);

und den output-Buffer so:

C-/C++-Quelltext

1
PurgeComm(hComm, PURGE_TXCLEAR);


Danke das ihr euch alle für mich den Kopf zerbrochen habt (habt ihr doch hoffentlich ;))

mfg,
Rhodan - der endlich die Steuersoftware für das STM fertig schreiben kann

Werbeanzeige