0

問題なく TCP フレームを送受信できます。しかし、ランダムな時間 (1 分から 1 時間までのすべて) の後、プログラムは失敗し、vListInsert の for ループに陥ります。

tcpip スレッドでは、コードはフレームを待ちます。これは

    sys_mbox_fetch(mbox, (void *)&msg);

これは sys_arch.c で定義されており、呼び出されると例外が発生します。mbox が初期化されていることを確認し、vListInsert (vTaskPlaceOnEventList で呼び出される) のリストの繰り返しに障害を追跡できることを確認しました。

    for( pxIterator = ( xListItem * ) &( pxList->xListEnd ); pxIterator->pxNext->xItemValue <= xValueOfInsertion; pxIterator = pxIterator->pxNext )
    {

        /* There is nothing to do here, we are just iterating to the
        wanted insertion position. */

    }

ご覧のとおり、この時点で例外が発生しているため、リストポインターが台無しになっています。理由はまだわかりません。

コールスタックは

  • tcpip_thread
  • sys_mbox_fetch
  • sys_arch_mbox_fetch
  • xQueueGenericReceive
  • vTaskPlaceOnEventList

lwIP で TCPIP_THREAD_STACKSIZE (600 から 4k) と MEM_SIZE を 12k に増減しようとしましたが、うまくいきませんでした。

使用される優先順位は次の 3 つです。tskIDLE_PRIORITY+1 tskIDLE_PRIORITY+2 と 5 (これには tskIDLE_PRIORITY はありません)

FRDM-K64F ボード上で動作する Cortex M4 を使用。

Netconn API を使用し、プリエンプティブではありません。

何をすべきか、次に何を試すべきかについての説明はありますか? ここで5日間立ち往生...

編集: 最大 50 個のパケット、224 バイトのパケットを送信し、次のパケットを送信する前に 191 バイトであるサーバーからの応答を待ちます。これは 1.5 秒ごとに行われます (最大出力)。

4

1 に答える 1