1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
大家好,
我正在使用Raw API处理lwip-udp。 我的应用代码是服务器。 在固定间隔内长时间执行接收时,我面临以下问题。 在从客户端接收连续数据包时,服务器仅处理256个数据包。 处理完某些数据包后,服务器和客户端之间的连接就会丢失。 在调试过程中,我观察了所有Mac寄存器。 我发现接收状态寄存器保持为1.这意味着没有接收缓冲区。 并且接收资源错误寄存器正在维护未处理的数据包。 这个问题是否与BD的记忆有关? 要么 接待有限制吗? 任何人都可以建议确切的问题在哪里? 附加信息: 客户端计时间隔:每10毫秒。 以太网通信模式:基于EMIO的实现。 处理器:Zynq702 |
|
相关推荐
8个回答
|
|
嗨雅阁,
我在这里遇到了同样的问题。 打开服务请求后,我了解到,Vivado 2015.4将会有一个修复。 RX DMA例程中似乎存在错误。 让我们等待并希望最好。 在此期间,您可以尝试一个丑陋的修复,这对我来说对Vivado 2015.3有用 在文件工作区 zc702_bsp ps7_cortexa9_0 libsrc lwip141_v1_2 src contrib ports xilinx netif xemacpsif_dma.c 在355行 更改 * temp = 0; if(bdindex ==(XLWIP_CONFIG_N_RX_DESC - 1)){* temp = 0x00000002; } 成 if(bdindex ==(XLWIP_CONFIG_N_RX_DESC - 1)){* temp = 0x00000002; } else {* temp = 0; } 有趣的是,这两个代码段应该做同样的事情,但事实并非如此。 请注意,只要您更改了BSP的设置,SDK就会从您的安装文件中加载原始资源,您必须再次更改该文件。 问候,塞巴斯蒂安 |
|
|
|
嗨sgeorgi_sen,
非常感谢你的回复。 我使用的是Vivado 2014.4版本。 尽管如此,根据你的建议,我做了修改 setup_rx_bds(XEmacPs_BdRing * rxring)函数。 但是性能没有变化。 仍然代码只接收256个数据包。 Lwip版本:1.4.0-v2.3 问候 萨卡尼亚 |
|
|
|
嗨Sukanya,
然后问题出在Vivado 2014.4的其他地方。 调试这种问题花了我几天。 您可以从激活LWIP的调试选项开始。 但在那之后它只是硬打印调试。 也许转换到2015.3可能会有所帮助? 祝你好运! 塞巴斯蒂安 |
|
|
|
非常感谢@Sebastian
|
|
|
|
嗨塞巴斯蒂安,
我在2015年尝试了上述修改。 在调试代码后,我已经看到了以下观察结果; 1.)当以1秒周期发送7个字节的数据时,服务器响应并在长时间测试期间继续响应。 2.)当以1秒周期发送大小为48字节的数据包时,服务器仅处理第一个211(appx)数据包。 在长时间测试期间,它不响应剩余的数据包。 3.)当包的周期改变为10ms时,进行相同的观察。 即使在修改队列大小,队列长度和缓冲区大小之后,观察到的性能也没有变化。 但我对改变临时变量的重要性并不是很清楚。 您是否观察或更改了任何其他参数或功能? 请求您,解决调试udp代码的任何其他建议。 我在bsp中做过的修改: xemacpsif_dma.c文件和void setup_rx_bds(xemacpsif_s * xemacpsif,XEmacPs_BdRing * rxring)函数; bdindex = XEMACPS_BD_TO_INDEX(rxring,rxbd); temp =(UINTPTR *)rxbd; if(bdindex ==(XLWIP_CONFIG_N_RX_DESC - 1)){* temp = 0x00000002; } else {* temp = 0; } temp ++; // * temp = 0; |
|
|
|
嗨,
这些代码修改在2015.4中不再是必需的。 Xilinx为Zynq修复了LWIP DMA例程。 也许您可以使用lwip echo服务器示例来确认您的主板是否正常工作? 问候,塞巴斯蒂安 |
|
|
|
嗨,
是的,我的董事会(Zedboad)工作正常。 因为我能够在发送7个字节的数据时看到长时间运行。 但是,当我以1秒的间隔发送48字节的数据时,服务器代码仅处理211(大约)数据包。 后来它没有响应剩余的数据包。 |
|
|
|
大家好,
在某种程度上,我们已经解决了上述udp接收问题,但在进行长期测试时仍然保留了性能问题。 服务器应用程序代码以1毫秒的周期处理客户端数据包。 最多2小时,服务器代码响应客户端数据包。 在一些实例代码被Xil_DataAbortHandler(void * CallBackRef)或Xil_Assert(const char8 * File,s32 Line)函数暂停后,反之亦然。 对Xil_DataAbortHandler的观察(void * CallBackRef): 每次DataAbort处理程序给出不同的“DataAbortAddr”值(FaultStatus为NULL,PrefetchAbortAddr为零)。 有时它指向udp_sendto_if()函数,其中pcb变为NULL。 在某些情况下,它指向XEmacPs_BdSetAddressTx(txbd,(UINTPTR)q-> payload)函数,该函数从emacps_sgsend(xemacpsif_s * xemacpsif,struct pbuf * p)调用。 等等,。 由于各种值无法进一步调试。 观察或Xil_Assert(const char8 *文件,s32行): 通过使用Xil_Assert函数参数,跟踪文件名和行号。 即xemacps_intr.c和第161行(Xil_AssertVoid(InstancePtr-> IsReady ==(u32)XIL_COMPONENT_IS_READY);) 在上面的行InstancePtr-> IsReady为零。 在整个BSP中,除初始化外,InstancePtr-> IsReady参数不会为零,因此无法确切地将其更改为零。 请求解决此问题并帮助调试问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
2416 浏览 7 评论
2821 浏览 4 评论
Spartan 3-AN时钟和VHDL让ISE合成时出现错误该怎么办?
2292 浏览 9 评论
3372 浏览 0 评论
如何在RTL或xilinx spartan fpga的约束文件中插入1.56ns延迟缓冲区?
2459 浏览 15 评论
有输入,但是LVDS_25的FPGA内部接收不到数据,为什么?
1149浏览 1评论
请问vc707的电源线是如何连接的,我这边可能出现了缺失元件的情况导致无法供电
582浏览 1评论
求一块XILINX开发板KC705,VC707,KC105和KCU1500
448浏览 1评论
2003浏览 0评论
727浏览 0评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 20:15 , Processed in 1.578458 second(s), Total 92, Slave 76 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号