0

如上所述,在 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 上的客户端代码由于无响应而在写入命令时失败网络连接(或类似的东西)。

所以我只是想知道是否有什么明显的我做错了?

4

1 回答 1

0

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

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

于 2015-04-23T16:16:47.550 回答