2015-11-11 24 views
0

我可以接收和发送没有问题的TCP帧。但是在随机时间(从1分钟到1小时)之后,程序失败,陷入vListInsert的for循环中。lwIP + FreeRTOS端口库存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

我试图增加和减少TCPIP_THREAD_STACKSIZE(从600到4K )和MEM_SIZE到lwIP的12k,没有运气。

优先使用的是以下3个; tskIDLE_PRIORITY + 1 tskIDLE_PRIORITY + 2和5(在此没有tskIDLE_PRIORITY)

使用运行在FRDM-K64F板上的Cortex M4。

使用Netconn API和非抢先。

任何想法该做什么以及接下来要做什么的解释?一直在这里呆了5天......

编辑: 发送多达50个数据包,224bytes数据包并等待服务器应答,这是191bytes发送下一个数据包之前。每1.5秒执行一次(最多输出)

回答

0

此问题通常是FreeRTOS使用的全部中断嵌套模型中断的无效中断优先级的症状。这是支持请求的常见原因,因此存在web page dedicated to it,FreeRTOS的较新版本包含many assert points,这些版本专门用于立即捕获此类错误配置,并向您显示其确切位置。