2

私は C 言語に慣れており、最近はシリアル通信で C# を使用するように求められています。以下は、COM ポートからデータを受信するための私のコードです。

public void RxData()
{
    int i = 0;
    int Data;
    bool StartRx = false;
    int timer;

    while (true)
    {
        Data = sp.ReadByte();
        if (Data == 0x01)
        {
            StartRx = true;
        }
        if (StartRx == true)
        {
            RxBuffer[i++] = Data;
        }
        if (Data == 0x04)
        {
            RxChkSum = RxBuffer[i - 2];
            break;
        }
        timer++;
        if(timer>100) 
        {
            timer = 0;
            break;
        }
    } 
}

上記は、0x01 で始まり 0x04 で終わるデータを受信する方法です。

データを受信しない場合に備えて、タイマーをインクリメントして 100 までカウントし、while ループを終了します。タイムアウトのようなもの。

しかし、タイマーが機能していないようです。データを受信しないと、私のプログラムは while ループから永久に抜け出せなくなります。

これが組み込み C プログラミングでの書き方であることは知っています。しかし、これは C# での正しい記述方法ですか?

4

2 に答える 2

1

ReadByte同期呼び出しです。バイトが読み取られた場合にのみ返されます。

試してみるには、読む前に利用可能なデータを確認できます。

if(sp.BytesToRead > 0)
{
    Data = sp.ReadByte();
}

それに加えて、 hmqcnoesyが提案したように、非同期読み取りを好みます。

于 2012-08-08T10:41:57.590 に答える