ZYNQ LWIP实验

0、说明

        xilinx vitis创建demo工程的时候,自带了lwip案例。已经被xilinx支持的很好,最多根据使用的phy不同,增加对自己phy的支持。

        移植工作已经被xilinx做好了。

1、创建vivado工程

        仅仅以PS端网卡为力,在vivado中增加对enet的使能即可。直接使用之前博客的例程Vivado工程配置petalinux实现linux下控制PL端GPIO_【星星之火】的博客-CSDN博客_petalinux和vivado

2、基于vitis创建lwip例程

        导入1中的硬件信息,创建vitis工程,选择Lwip模板工程。

 

3、修改工程支持自己的phy

        可以在创建工程后,在vitis中修改,或者直接到vitis安装路径下/tools/Xilinx/Vitis/2021.1/data/embeddedsw/ThirdParty/sw_services/lwip211_v1_5/src/contrib/ports/xilinx/netif修改例程源码。

 

4、测试

生成boot.bin文件

拷贝到SD卡,或者直接烧录到flash中。

上电查看串口输出:

 

 pc机处于同一网络,进行ping测试:

创建telnet

 

 

 

### 文件传输功能的设计 为了在 ZYNQ 平台上使用 lwIP 实现文件传输功能,可以通过 UDP 协议完成这一目标。以下是关于设计和实现的关键点: #### 1. 使用 lwIP 的 pbuf 数据结构 lwIP 中的核心数据结构 `pbuf` 是用于存储网络包的数据缓冲区[^2]。它支持链表形式的内存分配,能够高效处理不同大小的数据分片。对于大文件传输场景,需将文件分割成多个较小的部分,并将其封装到不同的 `pbuf` 缓冲区内。 ```c struct pbuf *file_chunk_to_pbuf(const uint8_t *data, u16_t length) { struct pbuf *p = pbuf_alloc(PBUF_TRANSPORT, length, PBUF_POOL); if (p && data != NULL) { memcpy(p->payload, data, length); } return p; } ``` 上述代码展示了如何将文件的一部分转换为 `pbuf` 结构以便后续发送操作。 #### 2. 配置 UDP 接收回调函数 UDP 协议的特点是非面向连接,适合对实时性和效率要求较高的应用场合。实验中提到需要理解 UDP 接收回调函数的作用以及其实现方式。当接收到远程主机发来的数据时,会触发该回调函数,在其中解析传入的内容并将之保存至 DDR 存储器中的指定位置。 ```c err_t udp_recv(void *arg, struct udp_pcb *upcb, struct pbuf *p, const ip_addr_t *addr, u16_t port){ if (!p || !arg) { /* 错误检测 */ if (p) pbuf_free(p); return ERR_ARG; } // 将接收到的数据存放到特定地址空间里 save_data_to_ddr((uint8_t *)p->payload, p->len); pbuf_free(p); return ERR_OK; } void setup_udp_server(u16_t local_port){ struct udp_pcb *pcb = udp_new(); udp_bind(pcb, IP_ADDR_ANY, local_port); udp_recv(pcb, &udp_recv, NULL); } ``` 以上片段定义了一个标准的 UDP 收听服务器逻辑框架,其中包括创建一个新的 PCB 控制块实例绑定本地监听端口号并注册自定义消息到达事件处理器等功能模块。 #### 3. 考虑实际应用场景下的优化措施 由于当前项目允许存在一定范围内的丢帧现象发生而不影响最终效果评估指标达成情况(即速度与精确度均不严格),所以在具体编码过程中可适当简化部分流程环节从而提高整体运行性能表现水平. 例如减少不必要的错误校验机制或者降低重试次数上限等等做法都可以有效缩短每次交互所需耗费的时间成本进而提升整个系统的吞吐量数值.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值