如上所述,在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上的客户端代码因写入命令而无法响应网络连接(或类似的东西)。
所以我只是想知道是否有任何明显的错误?
答案 0 :(得分:0)
崩溃后会发生什么?程序在哪里结束(在assert()中,在异常处理程序中等)?您使用的是哪个版本的FreeRTOS - 如果它是一个新版本,那么您已经定义了configASSERT(),这有助于突出显示与FreeRTOS的集成问题?
您的项目是否基于以下参考? http://www.freertos.org/RTOS-Xilinx-Zynq.html - 如果没有,可能会查看该代码可能会提示问题可能是什么。