0

上記のように、Zedboard で FreeRTOS+LwIP を使用すると問題が発生し、ボードがクラッシュして電源のリセットが必要になります。ネットワーク接続に関係していると思います.2つあり、1つは受信トラフィック用で、もう1つは送信トラフィック用です.両方とも正常に接続しますが、データは少し奇妙に見えます.

PCからデータを受信するために使用している関数は次のとおりです。

while (ntotal < size)
{
    n = lwip_read(connection_descriptor, (buffer+ntotal), size - ntotal);
    if (n < 0)
    {
        printf("Failed receiving frame, received %i bytes\n", ntotal);
        return -1;
    }
    ntotal = ntotal + n;
}

そして、これが発信用です:

int bytesSent = 0;
int bytesSentTotal = 0;
int lengthToSend = 0;
int lengthToSendTotal = 0;

lengthToSendTotal = Size;
lengthToSend = 1460;
printf("Processed frame about to be sent from obin%d\n", binNO);


while (bytesSentTotal + lengthToSend < lengthToSendTotal)
{
    //lengthToSend = lengthToSendTotal - bytesSentTotal;
    bytesSent = lwip_write(connection_descriptor, &(buffer[bytesSentTotal]), lengthToSend);
    if (bytesSent < 0)
    {
        printf("ERROR writing frame to socket\n");
        return -1;
    }
    else
    {
        bytesSentTotal += bytesSent;
        //printf("Data sent: %d\n", bytesSentTotal);
    }
}
lengthToSend = lengthToSendTotal - bytesSentTotal;
bytesSent = lwip_write(connection_descriptor, &(buffer[bytesSentTotal]), lengthToSend);

一度に大量のデータを送信しようとすると問題が発生するのではないかと考えたため、呼び出しごとに送信するデータ量を減らすように変更してみました (毎回 900kb 以上を送信しようとしました)。ただし、動作は関係なく同じように見えます。データが受信されて正常に開始され、その後フリーズし、多くの場合、データの返送の途中でフリーズし、最終的に PC のクライアント コードが応答がないために書き込みコマンドで失敗します。ネットワーク接続 (または同様のもの)。

だから、私が間違っていることが明らかな何かがあるかどうか疑問に思っていますか?

4

1 に答える 1

0

クラッシュするとどうなりますか?プログラムは最終的にどこに行きますか (assert()、例外ハンドラーなど)? FreeRTOS のどのバージョンを使用していますか?それが新しいバージョンの場合は、configASSERT()が定義されているため、FreeRTOS との統合の問題を強調するのに役立ちますか?

あなたのプロジェクトは次の参考文献に基づいていましたか? http://www.freertos.org/RTOS-Xilinx-Zynq.html - そうでない場合は、そのコードを調べることで、問題が何であるかについてのヒントが得られる可能性があります。

于 2015-04-23T16:16:47.550 に答える