質問

からのフォロー - GPS中間ドライバの問題

上記に成功答えて、私は新しい質問のために行くために問題をめぐる新たな情報を持って感じていませんでした。

私が直面しています問題は、データがGPS中間ドライバによって配信されているかの速さである。

私が正常にシリアルポートを読んで、正確な情報が公開されて見にポケットパテを使用しています。

COM 1 - GPS中間ドライバ

COM 6 - PCのシリアルポート(入力データ手動で)

COM 8 - GPSハードウェアの仮想シリアルポート

COM 8を読んだとき、私は18個のNMEA文字列については見ることができ、これは、我々は限られたUSB接続を介してそれをプッシュすることができますように高速のようになり、あらゆる〜3秒表示されます。そして、それはディスプレイにすぐに表示されます。 COM 6(手動でPCからの送信データ)を読み込むとき、それは均等にすばやくとして表示されます。だから、利用されたデータに問題はありません。

GPS中間ドライバに入力します。 GPS中間ドライバはCOM1(ソフトウェア)とCOM6(ハードウェア)に設定されている場合。それはGPS中間ドライバなしであったようCOM6に入力されたデータは、同じようにすぐにCOM1上に表示されます。データが変更されていない私はCOM6に「JON」を送信する場合、そう、それも結構ですその有効でないNMEAデータ、けれども、COM1に表示されます。

問題がCOM8です。 GPS中間ドライバはCOM1(ソフトウェア)とCOM8(ハードウェア)に設定されている場合。 COM1にPocketPuttyに示すデータが本当に遅いです。画面上の出力は、毎秒5文字程度でデータが有効ですが、それだけで非常にゆっくりと配信されて。 GPS中間ドライバは、私は私の仮想シリアルポートに問題を隔離している与えられた、一度にすべてのデータを1文字だけを読んでされていないかのように私にはこれは、仮想シリアルポートの実装に問題を指摘します。

缶誰もが必ず私はこれを改善するために変更することができるもの、COM8が直接GPSソフトウェアと連携し、データを示しPocketPuttyアプリケーションは、利用可能である、読まれて与えられた仮想シリアルポートの実装の明確な例を提供し、イムなどありませんそして正しいです。

役に立ちましたか?

解決

デバッグビルドを実行しているデバイスの製造元からサポートを取得した後、問題の原因は、クライアント・アプリケーションは、多くの読み取り呼び出しに作っていたでした。シリアルポートは、独自にそれらを扱うことができますが、GPS中間ドライバを介してコールの数が高すぎたとオーバーヘッドが、これはミューテックスロックと一般的なスレッドの問題にダウンし、通信を壊滅された。

クライアントアプリケーションは、作業OKに彼らのためにGPS中間ドライバに読み取りあたりのデータの960のバイトを読み取る必要があります。別の修正が見つかったので、これは理想的なソリューションではありません。

解像度は、すべての利用可能な十分な量のデータがあった場合のみデータを取得することになる読み出すように、読み出し方法でのWaitForSingleObject(IsThereEnoughGPSDATAEvent、COMTotalTimeout)を追加することでした。もともと私は、バッファに利用できるように960を要求したが、私はちょうど10バイトにそれを設定して、それはまだ動作します。

サンプルコード

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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top