带有线程/任务的freeRTOS + LwIP的TCP问题

时间:2015-04-23 15:29:05

标签: c tcp freertos lwip zynq

如上所述,在Zedboard上使用FreeRTOS + LwIP时出现问题,电路板崩溃并需要重置电源。我认为这与网络连接有关,我有两个,一个用于传入流量,一个用于传出,两者都连接正常,但数据看起来有点奇怪。

这是我用来从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上的客户端代码因写入命令而无法响应网络连接(或类似的东西)。

所以我只是想知道是否有任何明显的错误?

1 个答案:

答案 0 :(得分:0)

崩溃后会发生什么?程序在哪里结束(在assert()中,在异常处理程序中等)?您使用的是哪个版本的FreeRTOS - 如果它是一个新版本,那么您已经定义了configASSERT(),这有助于突出显示与FreeRTOS的集成问题?

您的项目是否基于以下参考? http://www.freertos.org/RTOS-Xilinx-Zynq.html - 如果没有,可能会查看该代码可能会提示问题可能是什么。