当前位置: 代码网 > it编程>操作系统>苹果Mac > ZYNQ Vivado2018 sdk 基于lwip库 UDP组播实现

ZYNQ Vivado2018 sdk 基于lwip库 UDP组播实现

2024年08月01日 苹果Mac 我要评论
一定要关闭MAC滤波功能,具体操作如下,1.打开 SDK 工程目录下文件 libsrc/emacps/src/xemacps.c。2.在函数 XEmacPs_Reset 中修改XEmacPs_SetOptions 函数中添加选项‐——“ XEMACPS_PROMISC_OPTION”至此,组播功能应该可以实现了。需要完整工程可以联系我。

1.vivado搭建

勾选ps或者pl网口并导入sdk中,本文选用的为zynq7020,只有pl端有网口。bd设计如下图。

2.选择新建new projet

新建new project,选择如下图所示,会自带lwip库

3.打开组播池#define lwip_igmp 1

具体操作如下两图,点击图1到图2,将igmp_optinns设置为true。

4.组播初始化与发送函数编写

/*
 *
 * 组播发送函数 *
 *
 */
 void udp_send_hy(unsigned char *data, unsigned short len, u16 port)
 {
     err_t err;
     struct pbuf *p = pbuf_alloc(pbuf_transport, len, pbuf_ram);
     unsigned char *data2 = "hello";

     u32  remote_addr[4] = { 0 };
     int i ;
     if (p)
     {
         memcpy(p->payload, data, len);

        err = udp_sendto(g_udppcb, p , &ipgroup,  port );

         pbuf_free(p);

     }


 }
/*
 *
 * 组播初始化
 */
 void udp_multicast(void)
 {

        char msg[] = "gaurav";
        err_t err;
        struct pbuf *p;

         p = pbuf_alloc(pbuf_transport, sizeof(msg), pbuf_ram);
         memcpy(p->payload, msg, sizeof(msg));

         ip4_addr(&ipgroup , 224, 23, 0, 1);

#if lwip_igmp

     err = igmp_joingroup(ip_addr_any , (struct ip4_addr*)(&ipgroup)); // 只需要将接收地址放入igmp组, 发送的不需要
     if (err_ok != err)
     {
         printf("lwip_igmp err  = %d \n", err);
         return ;
     }
#endif

      g_udppcb  = (struct udp_pcb*)udp_new();
      udp_bind(g_udppcb,ip_addr_any, udp_multicast_local_port );
      udp_recv(g_udppcb , udp_recv_hy, null);

 }

5.最后上开发板验证

从wireshark可以看到已经接受到组播信息6.注意事项!!!!!!!

一定要关闭mac滤波功能,具体操作如下,1.打开 sdk 工程目录下文件 libsrc/emacps/src/xemacps.c。2.在函数 xemacps_reset 中修改xemacps_setoptions 函数中添加选项‐——“ xemacps_promisc_option”至此,组播功能应该可以实现了。 需要完整工程可以联系我。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com