大师们,有个严重的问题请教大家。关于6678千兆网的UDP发送与接收问题。我在MCSDK里面的NDK的helloworld例子发现,当PC机一次发动一个大于1500字节的数据包,helloworld就不能接收到。发送大于1500字节数据也出错。在调试中发现大数据包分片后地层驱动能接收第一和数据包,二个后就有一个数据包接收不完整。比如PC发送3200字节。第一个包能接收1500,第二个包的数据就不完整。第三个又是200。请问这种问题是怎么引起的。TCP不出现这种问题。
Wei:
NDK的MTU设置和PC的MTU设置是否不匹配?如果PC的MTU设置的小一些还是有问题么?
Eric:
请问bomer,您采用的是NDK机制还是自己写的裸跑的程序运行的?求联系方式
bomer:
回复 Wei:
这个跟MTU没关系。近期查到了丢失中断。比如:发送2000字节子接收一个中断,但发送3000又能接收到2个中断。所以现在在查中断这块。请问你了解网络的中断和qmss,cppi怎么映射的吗?这块不太清楚。
Wei:
回复 bomer:
中断映射的代码在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);