1

私は組み込みハードウェア (TI : Piccolo Control Stick xxx69) を使用しており、これは FTDI USB からシリアル コンバータ ハードウェアへの変換を使用しています。

PC には、仮想 COM ポート (VCOM : 通常は COM7) 経由でハードウェアと通信しようとする単純な VC++ アプリケーションがあります。

  • ポートに正しく接続できます。

  • アプリケーション/PC からハードウェアにデータを送信でき、正しく受信されます。(したがって、PC 上の Tx は正常に動作しています)、アプリケーションはまず API を使用して接続を開き、createfile(... ... ...)次にwritefile(.. ... ..)Windows API を使用してポートに直接書き込みます。

  • 驚いたことに、シリアル ポートからアプリケーションに読み取ることができません。APIを呼び出すとreadfile(... ... ...)、ステータスが TRUE として返されますが、ゼロバイトが読み取られます。カーネル api を表示する API モニター ソフトウェアを使用してみましたNtreadfile(... ... ...)が、エラーが返されますSTATUS_TIMEOUT" [0x00000102]。データがオンラインにあるにもかかわらず、書き込みは機能しますが、読み取りは機能しないため、これは驚くべきことです。

通常のハイパーターミナル ソフトウェアを使用すると、コントローラからデータを正しく読み取ることができ、データが表示されるため、データはオンラインです。【コントローラー側はハイパーターミナルでデータが見えるので大丈夫です。

私はマイクロコントローラーを扱っているため、Windows プログラマーではありません。したがって、この問題を追求するという点で何らかの助けがあれば、非常に役立ちます。

よろしくお願いします、

-ヴァルン

ここに参照があります

4

1 に答える 1

1

問題は解決しました。InQueue > 0 (受信バッファーに少なくとも 1 バイトあることを意味します) またはタイムアウト (安全出口として) が終了するまで待機を追加する必要がありました。呼び出しをブロックしますが、現時点では私のアプリケーションでは問題ありません。ここでは、waitComm() がうまく機能しませんでした。

サンプル スニペット:

while(1)
    {
        ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST);

        if((CST.cbInQue >0)||(count >1000000))
        break;

        count++;
    }
于 2014-04-05T15:16:24.697 に答える