|
发表于 2020-11-19 17:12:31
|
显示全部楼层
1.测试1000+出问题的代码,代码中配置的参数ETH_MAX_PACKET_SIZE是332:
EthHandle.Init.RxBuffLen = ETH_MAX_PACKET_SIZE;
status = nx_packet_pool_create(&bsd_pool, "NetX BSD Packet Pool", ETH_MAX_PACKET_SIZE, nx_packet_pool_stack, sizeof(nx_packet_pool_stack));
后来改成了1524,测试跑了半个小时,200ms一包数据,10000+条没有出现这个问题。
2.缓冲区肯定是给够了nx_packet_pool_stack是12*ETH_MAX_PACKET_SIZE,在0x30042000之后。
之前的现象是发送1000+条出现接收中断不再触发,查看DMACSR、DMACRDTPR等寄存器数值也没什问题。
3.代码前后只是修改了PACKET的数据缓冲区的大小,不知到运行过程中什么原因导致的DMA的接收中断不再触发,应该也不存在DMA接收数据长度溢出,接收缓冲区长度指定和接收缓冲区长度都是指定的ETH_MAX_PACKET_SIZE。 |
|