循环

时间:2015-11-11 14:54:48

标签: freertos lwip

我可以毫无问题地接收和发送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秒(最多输出)

完成的

1 个答案:

答案 0 :(得分:0)

此问题通常是无效中断优先级的症状,违反了FreeRTOS使用的完整中断嵌套模型。这是支持请求的常见原因,因此有一个web page dedicated to it和更新版本的FreeRTOS包含many assert points,专门用于立即捕获此类错误配置,并准确显示它在哪里是