Zynq 多个UDP客户端组网启动问题(Auto negotiation error)PS:附UDP客户端初始化代码

news2024/9/20 10:55:43

        最近正在进行一个Zynq项目,根据设计需求,需要将上位机作为UDP服务器,而FPGA则充当UDP客户端。同时,服务器需要能够接收和控制多个UDP客户端。

        开发过程中,我是基于lwip UDP Perf Client 官方模版开发的。我遇到了以下几个问题及注意事项,做一个记录:

        1、每个客户端使用同一个IP地址的不同的源端口号,还是选择使用不同的IP地址来实现多个UDP客户端的接收和控制。

        (1)如果使用同一个IP地址的不同的源端口号,则需要网络初始化udp_bind()时,在port = udp_new_port()函数中,给每个客户端设置不同的源端口号(0~65535),Xilinx UDP例程默认(49152)。

         (2)使用不同的IP地址。这个简单,直接在如下代码定义全局变量local_ip_addr的值。

assign_default_ip(&(netif->ip_addr), &(netif->netmask), &(netif->gw));

        2、由于多个客户端,有的客户端启动慢,或者启动时网线连接异常,等待一会,串口会显示“Waiting for PHY to complete autonegotiation”——“Auto negotiation error”错误。这个错误叫自协商错误,通常发生在网络设备启动时候,进行自动协商时,表示设备无法成功协商和达成通信参数。查阅资料,主要原因可能是兼容性问题、电缆问题、配置错误和硬件问题。

        本工程,是由于硬件网线连接问题,所以,如果在启动时候,未连接成功,设计成等待即可。

        通过debug定位,是在初始化网络过程中,againxemacpsif_physpeed.c文件中,get_Marvell_phy_speed()函数,如果等待约30s未正确连接,则跳出等待,初始化失败。故,只要在这里一直等待硬件连接即可。

 3、多台网络设备连接一个服务器,记得每一台设备的MAC地址要不一样,否则会通信异常,或者设备连接时而连接时而断线。(容易马虎忘记)

4、外场设备组网,连接外网,接入政务云时,无法连接。原因:目标端口号是8080,查阅资料可知,:8080端口以及80端口属于高危端口,一般不私用,是被用于WWW代理服务的。

常见的高危端口有:0、21、22、23、25、80、102、110、111、119、135、137、138、139、161、177、389、1900-1905、5353、5355、5357、5432、6666-6669、8080、11211等,以及

1-1023:称为"保留端口"或"系统端口",它们用于常见的服务和协议,如HTTP(端口80)、FTP(端口21)和SSH(端口22)。通常,这些端口需要管理员权限才能使用。

不建议私用。

UDP客户端代码:

static void print_udp_conn_stats(void)
{
	xil_printf("local %s port %d connected with ",
			 inet_ntoa(server_netif.ip_addr),
			pcb->local_port);
	xil_printf("%s port %d\r\n",inet_ntoa(pcb->remote_ip),
			pcb->remote_port);
}


static void recv_callback(void *arg, struct udp_pcb *tpcb, struct pbuf *p, ip_addr_t *ip, u16_t port)
{
	/* do not read the packet if we are not in ESTABLISHED state */
	if (!p)
	{
		udp_remove(tpcb);
		udp_recv(pcb,NULL,NULL);
		return ;
	}

	g_udp_recv_flag = 1;
	/* indicate that the packet has been received */
	ReceiveDataAnalysis(tpcb,p);
	/* free the received pbuf */
	pbuf_free(p);
	return ;
}


/* Create Client PCB */
void start_application(void)
{
	err_t err;
	ip_addr_t remote_addr;
	int port = g_Net_Port[1]<<8 | g_Net_Port[0];
	char str_server_ip_addr[16] = {0};

	sprintf(str_server_ip_addr, "%d.%d.%d.%d",
			server_ip_addr.ip0, server_ip_addr.ip1, server_ip_addr.ip2, server_ip_addr.ip3);
	err = inet_aton(str_server_ip_addr, &remote_addr);
	if (!err) {
		xil_printf("Invalid Server IP address: %d\r\n", err);
		return;
	}

	/* Create Client PCB */
	pcb = udp_new();
	if (!pcb) {
		xil_printf("Error in PCB creation. out of memory\r\n");
		return;
	}

	err = udp_connect(pcb, &remote_addr, port);
	if (err != ERR_OK)
	{
		xil_printf("udp_client: Error on udp_connect: %d\r\n", err);
		udp_remove(pcb);
		return;
	}
	else
	{
		udp_recv(pcb,(udp_recv_fn)recv_callback,NULL);
		g_user_pcb = pcb;
	}

	/* Wait for successful connection */
	usleep(10);
	print_udp_conn_stats();
}

REF:

80 8080 端口不能用_80端口和8080不能用_wandersky0822的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736752.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重磅!高通大客户「跳单」,智能座舱SoC赛道进入「混战期」

哪家车企是高通座舱芯片的最大客户&#xff1f;答案不是蔚来、理想、小鹏等智能化布局领先的新势力&#xff0c;而是比亚迪。 高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车智能座舱前装标配高通芯片交付367.45万辆&…

DALL·E2(unCLIP)、Stable Diffusion、IS、FID要点总结

DALLE 1 DALLE 1可以看成是VQ-VAE和文本经过BPE编码得到的embedding AE&#xff08;Auto Encoder&#xff09; encoder decoder结构&#xff0c;AE在生成任务时只会模仿不会创造&#xff0c;所有有了后面的VAE VAE(Variational AutoEncoder) 不再学习固定的bottleneck特征…

2023-07-07-liunx环境,python调用ITK(c++版本)批量生成Drr

文章目录 一、前言二、配置过程2.1.CMake与ITK的配置2.2.改写ITK的生成drr代码2.3.编译代码2.4.python调用cpp 三、总结四、参考博客 一、前言 最近在做配准&#xff0c;需要用ITK来生成数据&#xff0c;windows版本可以通过cmake与visual studio可以跑通生成。但是想要在linu…

纯干货,全文手码:如何利用低/无代码平台建立集团信息化系统

信息化系统是企业管理体系的延伸 对于一家集团企业而言&#xff0c;要实现信息化&#xff0c;首先需要考虑是否已经建立了完备的信息化管理制度。早在上世纪九十年代卡特彼勒引入了6 Sigma&#xff0c;使整个集团公司的运营规范化、系统化。通过多年的实践积累&#xff0c;卡特…

【雕爷学编程】Arduino动手做(157)---MX1508双路电机驱动模块

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

计算机视觉:通过边缘检测探究卷积的特征提取功能

本文重点 在前面的课程中,我们学习了卷积核的运算,同时我们也学习了卷积核的含义,我们可以将卷积核理解为特征提取器,也就是说一个卷积核就是一个特征提取器,很多人对这种说法不了解,下面我们就通过一个边缘检测的例子来看一下卷积核是如何进行边缘特征的提取的。 什么…

[ICML 2023] Fast inference from transformers via speculative decoding

Contents IntroductionSpeculative DecodingStandardized SamplingSpeculative Sampling AnalysisNumber of Generated TokensCalculating α \alpha αWalltime ImprovementNumber of Arithmetic OperationsChoosing γ \gamma γ ExperimentsReferences Introduction 为了…

springboot+vue膳食营养健康网站零食美食品商城_4d8g9

随着社会的不断进步与发展&#xff0c;人们对生活质量要求逐步提升。如果开发一款膳食营养健康网站&#xff0c;可以让用户在最短的时间里享受到最好的服务&#xff1b;而开发本网站&#xff0c;又能够提高网站整体工作水平&#xff0c;简化工作程序&#xff0c;这对管理员和用…

北京“数据二十条”发布,筑牢数据安全根基,加速释放数据产能

要实现2000亿的目标&#xff0c;基础保障如何做好&#xff1f; 7月5日&#xff0c;中共北京市委、北京市人民政府印发《关于更好发挥数据要素作用进一步加快发展数字经济的实施意见》&#xff08;《实施意见》分为9个部分&#xff0c;共涉及20项具体任务&#xff0c;也被称作“…

TypeScript 中的 enum 枚举类型的使用解读。

前言 在 TypeScript 中&#xff0c;新增了很多具有特性的一些数据类型处理方法&#xff0c;enum 【枚举】就是其中&#xff0c;很具有代表性的一种&#xff0c;所以本章节就来聊聊 在 TypeScript 中如何去运用 enum 【枚举】。 枚举得的概念&#xff1a; 枚举&#xff08;Enum&…

Web前端工程师笔试题(合集)

Web前端开发工程师笔试题篇1 1. 在一个框架的属性面板中&#xff0c;不能设置下面哪一项。( C ) A.源文件 ; B.边框颜色 ; C.边框宽度 D.滚动条 2. CSS样式表根据所在网页的位置&#xff0c;可分为?(B ) A.行内样式表、内嵌样式表、混合样式表 B.行内样式表、内嵌样式表…

MySQL数据库——多表查询练习2

一、练习素材 创建表 --创建部门表dept create table dept ( dept1 int , dept_name varchar(11));--创建员工表emp create table emp ( sid int , name varchar(11), age int, worktime_start date, incoming int, dept2 int); 插入数据 --部门表插入数据 insert into dep…

C++ 栈和队列(stack and queue)语法使用及底层实现原理

本篇文章会对C中的容器stack和queue用法进行详解&#xff0c;也包含对优先队列&#xff08;priority_queue&#xff09;的讲解。同时会模拟实现stack、queue和priority_queue底层。希望本篇文章会对你有所帮助&#xff01; 目录 一、stack 栈 1、1 什么是适配器 1、2 stack 语法…

C++ 线程池实现

思路 创建多个工作线程同时维护一个公共的任务队列, 任务队列非空时通过信号量唤醒阻塞等待的工作线程, 工作线程通过互斥锁互斥的从任务队列中取出任务, 然后执行任务 实现 信号量类 class sem {//封装信号量类 public:sem(int num 0) {if (sem_init(&m_sem, 0, num)…

Kernel-Pwn-FGKASLR保护绕过

FGKASLR FGASLR&#xff08;Function Granular KASLR&#xff09;是KASLR的加强版&#xff0c;增加了更细粒度的地址随机化。因此在开启了FGASLR的内核中&#xff0c;即使泄露了内核的程序基地址也不能调用任意的内核函数。 layout_randomized_image 在fgkaslr.c文件中存在着…

支持中文手写和多画布的Handraw

什么是 Handraw ? Handraw 是支持中文手写和多画布的 Excalidraw 白板工具。 官网上项目名称还是 Excalidraw-CN&#xff0c;所以 Handraw 应该是基于 Excalidraw 二开的&#xff0c;特点是支持中文手写字体和多画布 官方也提供了免费使用的站点&#xff1a;https://handraw.t…

ModaHub魔搭社区:向量数据库Zilliz Cloud插入 Entity教程

目录 开始前 插入单个 Entity 批量插入 Entity 准备数据 插入数据 写入操作 本文介绍如何将 Entity 插入到 Zilliz Cloud 集群中的 Collection。 Entity 是 Collection 中的基本数据单元。同一个 Collection 中的 Entity 具有相同的属性,这些属性共同定义在 Schema 中…

低代码开发平台助力解决企业开发效率问题

编者按&#xff1a;随着企业应用需求的不断增加&#xff0c;提高企业开发效率已经成为许多企业的目标。传统的开发方法显然不适用&#xff0c;开发平台通过可视化拖拉拽搭建等易用性和高扩展性可以帮助企业解决这个问题。 关键词&#xff1a;可视化开发、私有化部署、前后端分离…

设计模式--------行为型模式

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制来在类间…

飞控学习笔记-IMU姿态算法

扩展卡尔曼滤波算法 传感器融合算法 卡尔曼滤波算法 最小二乘法 毕卡逼近法 对上式进行泰勒展开 得到四元数各阶近似算法&#xff1a; 梯度下降算法 梯度下降 互补滤波算法 chatgpt解释&#xff1a; 互补滤波&#xff08;Complementary Filter&#xff09;算法是一种常用…