c - freeRTOS + LwIP 与线程/任务的 TCP 问题

标签 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 以上)。然而,无论如何,行为似乎都是一样的,它会开始正常,接收数据,然后它会卡住,通常是在发回数据的过程中,直到最后我的电脑上的客户端代码由于无响应而在写入命令时失败网络连接(或类似的东西)。

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

最佳答案

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

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

关于c - freeRTOS + LwIP 与线程/任务的 TCP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827970/

相关文章:

xcode - 从 Swift 客户端上的 TCP 服务器获取响应

c - 返回错误的首选方式是什么?

ios - CocoaAsyncSocket 建立多个连接

c - 扫描并确定在命令提示符中输入的参数! (过得很辛苦)

google-chrome - Web浏览器如何监控当前打开网页的网络?

queue - 在非 ISR 上下文中使用 "FromISR"FreeRTOS 调用有什么缺点(如果有)?

c - 在 FreeRTOS 第一个任务运行期间,第二个固件插槽跳转到第一个插槽

rtos - RTOS如何完成从中断的任务切换

c - c语言中的gets函数有问题

C: 递归函数——二分查找