大师们,有个严重的问题请教大家。关于6678千兆网的UDP发送与接收问题。我在MCSDK里面的NDK的helloworld例子发现,当PC机一次发动一个大于1500字节的数据包,helloworld就不能接收到。发送大于1500字节数据也出错。在调试中发现大数据包分片后地层驱动能接收第一和数据包,二个后就有一个数据包接收不完整。比如PC发送3200字节。第一个包能接收1500,第二个包的数据就不完整。第三个又是200。请问这种问题是怎么引起的。TCP不出现这种问题。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大师们,有个严重的问题请教大家。关于6678千兆网的UDP发送与接收问题。我在MCSDK里面的NDK的helloworld例子发现,当PC机一次发动一个大于1500字节的数据包,helloworld就不能接收到。发送大于1500字节数据也出错。在调试中发现大数据包分片后地层驱动能接收第一和数据包,二个后就有一个数据包接收不完整。比如PC发送3200字节。第一个包能接收1500,第二个包的数据就不完整。第三个又是200。请问这种问题是怎么引起的。TCP不出现这种问题。
这个跟MTU没关系。近期查到了丢失中断。比如:发送2000字节子接收一个中断,但发送3000又能接收到2个中断。所以现在在查中断这块。请问你了解网络的中断和qmss,cppi怎么映射的吗?这块不太清楚。
中断映射的代码在nimu_eth.c中,使用的是accumulator event。
/* System event n - Accumulator Channel 0 */
eventId = PLATFORM_ETH_EVENTID;
/* Pick a interrupt vector id to use */
vectId = PLATFORM_ETH_INTERRUPT;
platform_write ("Ethernet eventId : %d and vectId (Interrupt) : %d \n", eventId, vectId);
/* Register our ISR handle for this event */
EventCombiner_dispatchPlug (eventId, (EventCombiner_FuncPtr)EmacRxPktISR, (UArg)ptr_net_device, TRUE);
EventCombiner_enableEvent(eventId);
/* Map the event id to hardware interrupt 7. */
Hwi_eventMap(vectId, eventId >> 5);
/* Enable interrupt */
Hwi_enableInterrupt(vectId);