Question

Suivez sur de - GPS Problèmes de pilote intermédiaire

Ce qui précède n'a pas répondu avec succès et pense avoir de nouvelles informations sur la question de faire une nouvelle question.

La question que je suis confronté est la vitesse dont les données sont en cours de livraison par le pilote intermédiaire GPS.

Je l'ai utilisé avec succès Pocket Putty lire les ports série et voir les informations exactes été exposées.

COM 1 - GPS pilote intermédiaire

COM 6 - Port série pour PC (données d'entrées manuellement)

COM 8 -. Port série virtuel pour le matériel GPS

Lors de la lecture COM 8, je peux voir environ 18 chaînes NMEA apparaissent toutes les 3 secondes, c'est aussi rapide que nous pouvons le pousser sur la connexion USB limitée. Et il apparaît rapidement sur l'écran. Lors de la lecture COM 6 (envoyer des données de PC manuellement), il apparaît tout aussi rapide. Donc, il n'y a pas de problème avec les données disponibles depuis.

Entrez dans le pilote intermédiaire GPS. Lorsque le pilote intermédiaire GPS est réglé sur COM1 (logiciel) et COM6 (Hardware). Les données saisies sur COM6 est affiché sur COM1 aussi rapidement qu'il était sans pilote intermédiaire GPS. Les données sont inchangées, donc si je vous envoie « JON » sur COM6, il apparaît sur COM1, même si ses données NMEA ne sont pas valables, ce qui est bien.

Le problème est avec COM8. Lorsque le pilote intermédiaire GPS est réglé sur COM1 (logiciel) et COM8 (Hardware). Les données montrant à PocketPutty sur COM1 est vraiment lent. La sortie sur l'écran est d'environ 5 caractères par seconde, les données sont valides, mais il vient d'être livré très lentement. Cela me signale un problème dans la mise en œuvre du port série virtuel, comme si le pilote intermédiaire GPS ne lit pas toutes les données qu'un seul caractère à la fois, étant donné que j'ai isolé la question à mon port série virtuel.

Quelqu'un peut-il fournir un bon exemple d'une mise en œuvre du port série virtuel, comme je ne suis pas sûr de ce que je pouvais changer pour améliorer cela, COM8 donné fonctionne directement avec le logiciel GPS et l'application PocketPutty, ce qui indique que les données sont disponibles, en cours de lecture, et est correct.

Était-ce utile?

La solution

Après avoir obtenu le soutien du fabricant de l'appareil en cours d'exécution d'une version de débogage, la cause du problème était les applications clientes faisaient de nombreux appels de lecture. Le port série peut les gérer lui-même, mais par le conducteur intermédiaire GPS le nombre d'appels étaient trop élevés et les frais généraux a été paralysant la communication, ce fut vers le bas pour les serrures Mutex et les questions de filetage général.

Les applications clientes ont besoin de lire 960 octets de données par lecture au pilote intermédiaire GPS pour eux au travail ok. Ce n'est pas une solution idéale donc une autre solution a été trouvée.

La résolution a été d'ajouter dans un WaitForSingleObject (IsThereEnoughGPSDATAEvent, COMTotalTimeout) dans la méthode de lecture, de sorte que toutes les lectures ne recevraient des données s'il y avait une quantité suffisante de données disponibles. A l'origine j'ai demandé 960 être disponible dans le tampon, mais je l'ai mis sur le compte seulement 10 octets et il fonctionne encore.

Exemple de code

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top