zynq ucos中移植lwip

2016-07-18 22:42 阅读 1,358 次 评论 13 条

尽管已经MicroZed下运行ucos调试ucos_tcpip日志中,已经将网口程序调试通过,但在实际使用时发现ucos没有公开这部分源码,不易扩展,下面将我移植的过程记录下来。

在ucos中configuration for OS的ethernet设置保持默认设置;

在driver中设置ethernet的驱动为emacps

clip_image002

在ucos 1.30版的ucos_standalone的src中xil_types.h与vivado2015.1中的emacps中数据类型定义不同。所以生成emacps的时候会出现LONG找不到定义的错误。解决办法将ucos库(不是BSP)中的xil_types.h文件用2015.1版standalone中xil_types.h替换。文件所在路径如下ucos_v1_30\ucos\components\ucos_standalone\src\common

由于修改的lwip的OS支持中使用的sem、mutex、mbox等与ucos系统相关的模块,采用KAL进行创建,所以需要使用从堆上分配空间,ucos默认的HEAP_SIZE为512,不够使用(原因参见ZYNQ ucos KAL_LockCreate创建互斥信号量失败),所以这里设置为10K。

clip_image004

将lwip在standalone BSP中生成源代码拷贝到ucos的应用程序工程目录下。设置include文件目录

clip_image006

修改sys_arch.h文件,定义ucos相关的系统变量类型,如下所示

clip_image008

修改sys_arch.c中具体的函数实现。注:在创建任务、信号量、消息队列时增加一些调试信息,便于调试。

更改完成后,需要修改opt.h中的,TCPIP_THREAD_STACKSIZE的大小8182。

优先级默认为1,倒可以不用修改,修改的优先级不能低于创建tcpip任务的优先级,不然会造成任务创建不成功,而出现死锁。

由于mbox使用了ucos的中msgq实现,而ucos不支持0个消息的消息队列,所以TCPIP_MBOX_SIZE需要修改。

clip_image010

由于使用zynq自带emac连接phy,所以不需要axiemac等网络连接,所以可以将axiemac相关内容删除,不然编译出错。

使用简单的IPV4,所以也将IPV6的支持删除。

emacps中的中断采用的standalone中sugic的方式,与ucos就是在中断handle的类型不同,ucos为两个参数,而standalone为一个参数,可能直接混用也可以,为了避免不安全的,作了一个转换,通过ucos的inthandle调用standalone的inthandle,处理掉ucos多余的一个参数。

下面为在xemacpsif_dma.c的XStatus init_dma(struct xemac_s *xemac)函数中注册中断。

clip_image012

ucos中断转换为standalone中断处理

clip_image014

到此ucos BSP与lwip库程序的修改与编译完成。

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

发表评论


表情

  1. 苏朕
    苏朕 【队长】

    您好,我现在也在弄Xilinx芯片Ucosiii系统下的lwip移植,弄了几天也没弄出来,看了您这篇文章,希望得到您的帮助,您能不能把工程代码发给我一份,小弟不胜感激,电话15010968806,我也愿意花一定费用购买

  2. will
    will【站长】

    是在开发板下运行吗?我的工程是在开发板下调试通过的。
    已发送到你邮箱,试试能否正常运行

  3. 苏朕
    苏朕 【队长】

    您发给我的代码我运行成功了,真的不知道该怎么改写您

  4. will
    will【站长】

    不客气呀

  5. 苏朕
    苏朕 【队长】

    您好,我在您的程序上做了些改动,然后又遇到了问题
    问题描述:例程里实现tcp的工程用的是lwip内核函数,我之前在ST上做的都是用的Lwip的API函数,用的比较顺手,我将LWIP_NETCONN宏定义设置为1,然后相应的API函数得到了释放编译,编译的时候对应的sys_arch.h中的几个宏定义编译出错,我做了一下改动,但是运行不起来,对应的文件,我发您邮箱了,有时间您帮我看看啊。

  6. will
    will【站长】

    这个工程我是从standalone BSP下生成lwip文件中拷贝出来作的修改,当时在生成lwip时,选择的RAW模式,个人觉得你应该在standalone BSP下载选择API模式生成lwip的配置源码,然后对照现在的工程进行修改。
    这几天事情有点多,周末有时间再看看。

  7. 苏朕
    苏朕 【队长】

    您说的方法我之前试过了,在standalone BSP下载选择SOCKET API模式生成lwip的配置源码的时候软件会报很多错误,所以就放弃了,周末您要是有时间就帮我看看,先谢谢啦

  8. 苏朕
    苏朕 【队长】

    程序调通了,这酸爽,做梦都是调程序哈,谢谢啦,您的博客真不错

  9. will
    will【站长】

    还没来得及看,调通就好,欢迎常来

  10. long
    long 【农民】

    您好,我最近在用miz702开发板进行ucosiii lwip zynq 的移植,希望能得到您的帮助,请问能否将代码发给我一份,不胜感激。邮箱:limtens_xu@163.com

  11. will
    will【站长】

    将上次发的邮件已转发到你邮箱请查收

  12. k030941503
    k030941503 【农民】

    您好,我现在也在弄Xilinx芯片Ucosiii系统下的lwip移植,看了您的文章尝试着移植,遇到了各种问题,目前协议栈部分还是没有办法跑通,希望得到您的帮助,您能不能把工程代码发给我一份,小弟不胜感激,电话18600364652,邮箱:k030941503@163.com,我也愿意花一定费用购。

  13. will
    will【站长】

    bsp包与程序已发送到你邮箱