Frage

Folgen Sie aus - GPS-Treiber Probleme

wurde Die oben nicht erfolgreich beantwortet und ich fühle mich neue Informationen über das Thema haben für eine neue Frage zu gehen.

Die Frage, die ich bin vor ist die Geschwindigkeit, wie schnell Daten vom GPS-Treiber geliefert werden.

Ich habe Pocket-Putty erfolgreich verwendet, um die seriellen Ports zu lesen und sehen, die genaue Informationen ausgesetzt worden ist.

COM 1 - GPS-Treiber

COM 6 - Serielle Schnittstelle zum PC (Eingangsdaten manuell)

COM. 8 - virtuelle serielle Schnittstelle für GPS-Hardware

Wenn COM Lese 8, kann ich sehen, etwa 18 NMEA-Strings alle ~ 3 Sekunden erscheinen, ist dies so schnell, wie wir es über den begrenzten USB-Anschluss schieben. Und es scheint, schnell auf dem Display. Wenn COM 6 (Sendedaten vom PC manuell) zu lesen, ist es ebenso so schnell angezeigt. So gibt es kein Problem mit den Daten zur Verfügung gestanden.

Geben Sie in den GPS-Treiber. Wenn der GPS-Treiber ist auf COM1 (Software) und COM6 (Hardware). Die Daten auf COM6 eingegeben werden genauso schnell auf COM1 angezeigt, wie es ohne den GPS-Treiber war. Die Daten sind unverändert, also wenn ich „JON“ auf COM6 senden, es an COM1, obwohl seine nicht gültig NMEA Daten erscheinen wird, was in Ordnung ist.

Das Problem ist mit COM8. Wenn die GPS-Treiber an COM1 (Software) und COM8 (Hardware) eingestellt. Die Daten in PocketPutty auf COM1 zeigt ist sehr langsam. Die Ausgabe auf dem Bildschirm ist etwa 5 Zeichen pro Sekunde sind die Daten gültig, aber es nur sehr langsam geliefert. Dies ist für mich darauf hin, ein Problem bei der Umsetzung der virtuellen seriellen Schnittstelle, als ob der GPS-Treiber ist, alle Daten nur ein Zeichen in einer Zeit nicht zu lesen, da ich das Thema meiner virtuelle serielle Schnittstelle getrennt habe.

Kann jemand ein klares Beispiel für eine virtuelle serielle Schnittstelle Implementierung bereitstellen, wie im nicht sicher, was ich könnte dies zu verbessern, ändere direkt gegeben COM8 mit GPS-Software arbeitet und die PocketPutty-Anwendung, die die Daten anzeigt, verfügbar ist, gelesen zu werden, und korrekt ist.

War es hilfreich?

Lösung

Nach Unterstützung der Gerätehersteller immer ein Debug-Build ausgeführt wird, die Ursache des Problems war, Client-Anwendungen wurden zu viele Lese Anrufe. Die serielle Schnittstelle kann mit ihnen umgeht auf seinem eigenen, sondern über die GPS-Treiber die Anzahl der Anrufe waren zu hoch und der Aufwand, die Kommunikation war lähmend, dies war bis auf Mutex Schlösser und allgemeine Threadingprobleme.

Client-Anwendungen müssen für sie zu arbeiten ok 960 Byte Daten pro Lese zum GPS-Intermediate-Treiber lesen. Dies ist keine ideale Lösung, um ein weiteres Update gefunden wurde.

Die Auflösung war in einem WaitForSingleObject (IsThereEnoughGPSDATAEvent, COMTotalTimeout) in der Lesemethode hinzuzufügen, so dass alle liest würde nur Daten, wenn es eine ausreichende Menge an Daten zur Verfügung steht. Ursprünglich bat ich 960 im Puffer zur Verfügung zu stehen, aber ich habe es auf nur 10 Byte nach unten und es funktioniert immer noch.

Beispielcode

DWORD COM_Read( DWORD hOpenContext, LPVOID pBuffer, DWORD Count )
{
    if(gpsThreadEvents[GPS_THREAD_EVENT_DATA_AVAILABLE] != NULL)
    {
        if(WaitForSingleObject(gpsThreadEvents[GPS_THREAD_EVENT_DATA_AVAILABLE], GPSTimeouts.ReadTotalTimeoutConstant) != WAIT_OBJECT_0)
        {
            return 0;
        }
    }

    //read code goes in here

    return dataOut;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top