zynq下ucos lwip优化debug过程

2016-07-25 22:13 阅读 812 次 评论 0 条

在上一日志MicroZed ucos lwip echo server测试中,基本已经完成了lwip在ucos下的移植,然而cpu占用率高,影响了其他任务的执行。如果想看lwip的优化结果可以看zynq ucos lwip echo sever优化版

所以想提高一下lwip的运行效率,最简单的将lwip文件夹使用O2优化,完全没效果,消耗cpu的是查询网口输入的任务。

开启Dcache(即在应用程序中,不关闭dcache),这是检测phy配置netif均能通过,就是ping不通,也不能连接。

开Dcache条件下的BDRxing,没有什么异常

clip_image002

但是观察gem寄存器的状态,0xE000B018寄存器(接收buffer descriptor)为0x301AE8,超过上图中的HighBdAddr 0x003001f8。由于BD中有指示结束的标志位,所以能够超过HighBdAddr,应该是写入cache中的BD,没有更细到ddr中,dma在ddr中读取bd时与cache中不一致造成。并且在往后查看BD,确实有被dma操作的痕迹。

image

尽管在lwip中确实操作将bd_space设置为非cache的,但似乎并没有奏效,而说明中指出一次刷新cache为32bytes,会将邻近的BD进行刷新,为了避免dma与cpu同时操作一个BD,还是建议不使用cache。

最后贴一组正常的BD ram与GME的寄存器的值

rxbd状态

clip_image002[4]

eth0的GME状态寄存器

clip_image004

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:zynq下ucos lwip优化debug过程 | 起点博客
分类:应用笔记 标签:, , , , , ,

发表评论


表情