我可以接收和发送没有问题的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秒执行一次(最多输出)