zynqmp zcu102 arm 裸机UDP

2023-05-16

sdk2017没有udp例程只有tcp例程。

以下是调试通的udp例程:

1.创建lwip测试工程或者在现有工程添加lwip库。

2.添加udp代码,也可以从tcp例程修改:


int udpinit()
{
	struct ip_addr ipaddr, netmask, gw;

	/* the mac address of the board. this should be unique per board */
	unsigned char mac_ethernet_address[] =
	{ 0x00, 0x0a, 0x35, 0x00, 0x01, 0x02 };

	echo_netif = &server_netif;
#if defined (__arm__) && !defined (ARMR5)
#if XPAR_GIGE_PCS_PMA_SGMII_CORE_PRESENT == 1 || XPAR_GIGE_PCS_PMA_1000BASEX_CORE_PRESENT == 1
	ProgramSi5324();
	ProgramSfpPhy();
#endif
#endif

/* Define this board specific macro in order perform PHY reset on ZCU102 */
#ifdef XPS_BOARD_ZCU102
	IicPhyReset();
#endif

	//init_platform();

#if LWIP_DHCP==1
    ipaddr.addr = 0;
	gw.addr = 0;
	netmask.addr = 0;
#else
	/* initliaze IP addresses to be used */
	IP4_ADDR(&ipaddr,  192, 168,   1, 111);
	IP4_ADDR(&netmask, 255, 255, 255,  0);
	IP4_ADDR(&gw,      192, 168,   1,  1);
#endif
	xil_printf("lwip init\r\n");

	lwip_init();

  	/* Add network interface to the netif_list, and set it as default */
	xil_printf("net interface 1:\r\n");
	if (!xemac_add(echo_netif, &ipaddr, &netmask,
						&gw, mac_ethernet_address,
						PLATFORM_EMAC_BASEADDR)) {
		xil_printf("Error!\n\r");
		return -1;
	}

//	xil_printf("net interface 2:\r\n");
//	if (!xemac_add(echo_netif, &ipaddr, &netmask,
//							&gw, mac_ethernet_address,
//							XPAR_XEMACPS_1_BASEADDR)) {
//		xil_printf("Error!\n\r");
//			//return -1;
//	}

	netif_set_default(echo_netif);

	/* now enable interrupts */
	platform_enable_interrupts();

	/* specify that the network if is up */
	netif_set_up(echo_netif);

#if (LWIP_DHCP==1)
	/* Create a new DHCP client for this interface.
	 * Note: you must call dhcp_fine_tmr() and dhcp_coarse_tmr() at
	 * the predefined regular intervals after starting the client.
	 */
	dhcp_start(echo_netif);
	dhcp_timoutcntr = 24;

	while(((echo_netif->ip_addr.addr) == 0) && (dhcp_timoutcntr > 0))
		xemacif_input(echo_netif);

	if (dhcp_timoutcntr <= 0) {
		if ((echo_netif->ip_addr.addr) == 0) {
			xil_printf("DHCP Timeout\r\n");
			xil_printf("Configuring default IP of 192.168.1.111\r\n");
			IP4_ADDR(&(echo_netif->ip_addr),  192, 168,   1, 111);
			IP4_ADDR(&(echo_netif->netmask), 255, 255, 255,  0);
			IP4_ADDR(&(echo_netif->gw),      192, 168,   1,  1);
		}
	}

	ipaddr.addr = echo_netif->ip_addr.addr;
	gw.addr = echo_netif->gw.addr;
	netmask.addr = echo_netif->netmask.addr;
#endif

	print_ip_settings(&ipaddr, &netmask, &gw);

	/* start the application (web server, rxtest, txtest, etc..) */
	start_application();
	g_init = 1;
	/* receive and process packets */
	int i = 0;
	char buf [50];
	//while (1) {

	sprintf(buf, "%d", i++);

	//	transfer_data(buf);
	//	sleep(1);
	//}
  

	return 0;
}

/*必须调用*/
void rcvLoop(void)
{
	if(g_init > 0)
	{
		xemacif_input(echo_netif);
	}
}



struct udp_pcb *pUdp = NULL;
struct pbuf *pbuf = NULL;
static int g_init = 0;

int transfer_data(char *p)
{
	err_t ret;

	if(0 == g_init)
	{
		return -1;
	}

	pbuf = pbuf_alloc(PBUF_TRANSPORT, strlen(p), PBUF_POOL);//PBUF_REF
	strcpy(pbuf->payload, p);

	ret = udp_send(pUdp, pbuf);
	if (ret != ERR_OK) {
		//xil_printf("udp_send error\r\n");
	}

	pbuf_free(pbuf);

	return 0;
}

int start_application()
{
	err_t err;
	unsigned port = 8080;

	//start_application
	struct ip_addr remote_addr;
	pUdp = udp_new();

#if 0
	pUdp->local_port = port;
	err = inet_aton("192.168.1.111", &pUdp->local_ip);
	if (!err) {
		xil_printf("Invalid Server IP address: %d\r\n", err);
		return;
	}

	pUdp->remote_port = port;
	err = inet_aton("192.168.1.100", &pUdp->remote_ip);
	if (!err) {
		xil_printf("Invalid Server IP address: %d\r\n", err);
		return;
	}

	err = udp_bind(pUdp, IP_ADDR_ANY, pUdp->local_port);
	if (err != ERR_OK) {
		xil_printf("Unable to bind to port %d: err = %d\n\r", pUdp->local_port, err);
		return -2;
	}
#endif

	IP4_ADDR(&remote_addr,  192, 168, 1, 100);
	xil_printf("remote_addr : 192, 168, 1, 100\r\n");
	xil_printf("remote port : %d\r\n", port);

	err = udp_connect(pUdp, &remote_addr, port);
	if (err != ERR_OK) {
		xil_printf("udp_client: Error on udp_connect: %d\r\n", err);
		udp_remove(pUdp);
		return;
	}

	g_init = 1;

#if 0
	
	struct tcp_pcb *pcb;
	/* create new TCP PCB structure */
	pcb = tcp_new();
	if (!pcb) {
		xil_printf("Error creating PCB. Out of Memory\n\r");
		return -1;
	}

	/* bind to specified @port */
	err = tcp_bind(pcb, IP_ADDR_ANY, port);
	if (err != ERR_OK) {
		xil_printf("Unable to bind to port %d: err = %d\n\r", port, err);
		return -2;
	}

	/* we do not need any arguments to callback functions */
	tcp_arg(pcb, NULL);

	/* listen for connections */
	pcb = tcp_listen(pcb);
	if (!pcb) {
		xil_printf("Out of memory while tcp_listen\n\r");
		return -3;
	}

	/* specify callback to use for incoming connections */
	tcp_accept(pcb, accept_callback);

	xil_printf("TCP echo server started @ port %d\n\r", port);
#endif
	return 0;
}

3.只测试了发送接口,接收没有测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

zynqmp zcu102 arm 裸机UDP 的相关文章

  • 为什么通过UdpClient发送会导致后续接收失败?

    我正在尝试创建一个 UDP 服务器 它可以向所有向其发送消息的客户端发送消息 真实情况要复杂一些 但最简单的方法是将其想象为一个聊天服务器 之前发送过消息的每个人都会收到其他客户端发送的所有消息 所有这一切都是通过UdpClient 在单独
  • 为什么 i2c_smbus 函数不可用? (I2C——嵌入式Linux)

    有很多参考使用i2c smbus 开发嵌入式 Linux 软件时在 I2C 总线上进行通信的函数 什么时候i2c smbus函数如i2c smbus read word data在软件项目中引用了 ARM8 处理器错误 例如 i2c smb
  • 产生并处理软件中断

    有人可以告诉我如何在Linux下生成软件中断然后用request irq处理它吗 或者也许这是不可能的 您可以使用软中断来代替 您可以通过编辑 include linux interrupt h 来定义您的 sofirq 然后使用函数 ra
  • 使用 Android NDK 使用 -fsigned-char 进行构建安全吗?

    为了与其他平台保持一致 我需要使用signed char在我正在处理的一些本机代码中 但默认情况下在Android NDK上char类型是unsigned 我尝试明确使用signed char类型 但它生成太多警告differ in sig
  • 提高UDP可靠性

    我正在构建一个基于 UDP 的小型服务器 服务器基于 Net并使用它自己的Socket类 我通过 ReceiveMessageFromAsync 和异步发送使用完成端口 我的问题是我失去了大约 5 10 的流量 现在我明白这是正常的 但是有
  • 为多线程 UDP 客户端执行“close ()”时套接字描述符未释放

    我在下面编写了 UDP 客户端 它基本上生成一个单独的线程来接收数据报 但是数据报仅在主线程中发送 现在 在 Linux 发行版上实例化 udpClient 1 UDP 客户端后按 ctrl D 实现退出循环 围绕 getline 调用 并
  • DS-5:什么是 FVP、RTSM、基础模型、AEM 模型、快速模型、CADI?

    DS 5 模拟器使用了很多术语 如 FVP RTSM 快速模型 基础模型 AEM 模型 CADI Arm的文档中提供的解释不是很清楚 这些术语的含义是什么 作为 DS 5 的最终用户我应该关心哪些术语 Model 软件模拟的行业术语 就 A
  • AOSP 的“午餐”组合是什么意思?我需要选择什么?

    我是 Android 设备 ROM 开发的新手 无论如何 我现在正在为具有 64 位处理器的中国设备构建 AOSP 我按照 source android com 上的菜单进行操作 当我运行 午餐 命令时 终端显示 午餐菜单 选择一个组合 我
  • saber sd 如何在没有 SPL 的情况下直接从 uboot 启动

    sabre sd 基于 imx 6 最大内部 RAM 约为 150Kb 然而 uboot 足够大 可以容纳在这个空间中 在这个场景中事情是如何进行的 https community freescale com docs DOC 95015
  • 为什么 GCC 交叉编译不构建“crti.o”?

    在尝试为arm构建gcc 4 x x交叉编译器时 我陷入了缺失的困境crti o文件在 BUILD DIR gcc子目录 An strace在顶层Makefile表明编译后的xgcc正在调用交联器ld with crti o 作为一个论点
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b
  • 使用 NEON 内在函数除以浮点数

    我当时正在处理四个像素的图像 这是在armv7对于 Android 应用程序 我想分一个float32x4 t向量由另一个向量组成 但其中的数字与大约不同0 7 to 3 85 在我看来 除法的唯一方法是使用右移 但这是针对一个数字2 n
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 如何模拟ARM处理器运行环境并加载Linux内核模块?

    我尝试加载我的vmlinux into gdb并使用 ARM 内核模拟器 但我不明白为什么我会得到Undefined target command sim 这是外壳输出 arm eabi gdb vmlinux GNU gdb GDB 7
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • 如何在WinMobile6上启用ARMv6非对齐访问?

    ARMv6 引入了一个很棒的功能 未对齐的内存访问 这使得代码中的某些事情变得更加简单和更快 但微软只在winCE6中提供了API 现在大多数 PDA 都基于 WinMobile6 基于 CE 5 x 默认情况下禁用未对齐访问 我尝试在 C
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • 为什么 Kademlia 使用 UDP?

    为什么Kademlia 分布式哈希表 http en wikipedia org wiki Kademlia使用 UDP 作为其网络传输协议 即使它不可靠 主要原因是您快速查询了许多以前从未建立过联系并且可能在查找过程中永远不会再看到的节点
  • 从不同进程通过套接字 (UDP) 回复客户端

    我有一个服务器而不是 命令处理程序 进程 它通过 UDP 接收消息 并通过其发布的 API 无论该进程采用何种 IPC 机制 与该进程进行通信 从而将要做的工作委托给不同的进程 我们的系统有多个协作进程 然后 该 API 调用的结果会从命令
  • ARM 的内核 Oops 页面错误错误代码

    Oops 之后的错误代码给出了有关 ARM EX 中的恐慌的信息 Oops 17 1 PREEMPT SMP在这种情况下 17 给出了信息 在 x86 中它代表 bit 0 0 no page found 1 protection faul

随机推荐

  • 2022年技术积累方向---梳理

    1 xff0c GPGPU暂停 xff0c 积累了GPU基础架构 xff0c 图形渲染 xff0c IC芯片设计 xff0c FPGA xff0c EDA VCS xff0c 2 xff0c GPU芯片设计公司 xff0c Start up
  • 利用 GitHub 从零开始搭建一个博客

    阅读本文大概需要 10 分钟 趁着周末 xff0c 搭建了一下 NightTeam 的官方博客和官方主页 xff0c 耗时数个小时 xff0c 两个站点终于完工了 这里写一篇文章顺手记录了下来 不过这篇原创我发在了 NightTeam 上面
  • make, cmake, bazel

    整理收集了一些自动化编译链接工具的使用教程 希望可以在之后能更好的理解和使用它们 1 make Linux 下 Make 命令Linux make Command Explained With Examples使用make命令编译项目文件入
  • win7环境下安装ubuntu双系统

    我按照网上的方法实验了好多次 xff0c 最终实验出了一种绝对可以成功的方法 一 软件准备 1 下载 Ubuntu 系统镜像 xff1a http www ubuntu com download desktop xff1b 我用的是ubun
  • Linux/Ubuntu16.04 安装RealSense SDK 2.0

    RealSense实感 Intel 安装环境 xff1a Ubuntu 16 04 需要有USB3 0 不是16 04的系统 xff0c 安装过程不同 更多的安装细节 xff0c 见参考资料 1 更新Ubuntu以及BOOT sudo ap
  • KEIL MDK 5默认快捷键一览

    以前使用MDK时总感觉这个IDE不是很方便 xff0c 有些常用功能的快捷键不知道是什么 xff0c 偶然发现在MDK中可自定义功能的快捷键 xff0c 而且有些功能的快捷键已经设置好 在此将这些快捷用表格形式列出来 xff0c 便于大家查
  • 工科研究生如何选导师的一点点建议

    引言 今天是教师节 xff0c 首先祝老师们节日快乐 今天说说关于工科研究生如何选导师 xff0c 选一个合适自己的老师 xff0c 每个教师节你都能诚心的祝福自己的导师 我见过的导师类型也有限 xff0c 仅供参考 我从以下几个方面为大家
  • 解决if __name__ == ‘__main__‘下面的代码未执行的问题

    很多人在用pycharm运行代码时会出现if name 61 61 34 main 34 下面的代码没有执行的问题 xff0c 出现这类问题的原因是unittest运行姿势造成的 xff0c 如图 xff1a 解决方案 xff1a 点击倒三
  • ROS总结——ROS节点

    理解ROS节点 本博客是对http wiki ros org 上ROS教程的学习总结 xff0c 欢迎大家交流学习 本节介绍 ROS 图 xff08 graph xff09 概念并介绍如何使用roscore rosnode和 rosrun
  • VSCode 的 #ifdef 区域变灰

    习惯了使用 VSCode xff0c 写 C 43 43 代码也用这个编辑器 xff0c 但是有 ifdef 的地方就会变灰 xff0c 很影响使用 可以在 C C 43 43 插件里打开设置 xff0c 将下面这个选项去勾选 xff1a
  • FreeRTOS系列|内存管理二

    内存管理二 内存管理应用实例 本实例介绍FreeRTOS内存管理中heap 4方法的内存申请和释放函数的使用 xff0c 并观察申请和释放过程中内存大小的变化情况 使用STM32CubeMX将FreeRTOS移植到工程中 xff0c 创建一
  • bitmap转yuv420p数据以及数据灰度化

    bitmap获取argb数据 64 param bitmap 64 return private int getArgbFromBitmap Bitmap bitmap int argbs 61 new int bitmap getWidt
  • Assertion "OSQCreate" failed at line 71 in ..\LWIP\arch\sys_arch.c错误解决方法

    最近在做STM32F407的开发板实验的时候 xff0c 在开发板移植了uCosII和LWIP xff0c 按照正点原子的开发板例程 xff0c 做到第八个实验 NETCONN TCP Client 的时候 xff0c 出现了如下的错误 A
  • IaaS、PaaS和SaaS简单理解

    IaaS xff1a Infrastructure as a Service 基础设施即服务 第一层叫做IaaS 基础设施即服务有时缩写为 IaaS xff0c 包含云 IT 的基本构建块 xff0c 通常提供对联网功能 计算机 xff08
  • opencv aruco参数分析

    aruco cpp 在287行有一个DetectInitialCandidatesParallel 在这里面有并行操作 xff0c 用于对图像进行二值化 xff0c 之后检测二值化后的图像中是否存在marker 其循环次数直接和adapti
  • 超实用的 IPTV 管理工具,xTeVe 助你定制专属电视频道。

    虽然现在视频流媒体点播平台已经成为了大家主要的影音娱乐渠道 xff0c 似乎没什么人看电视了 xff0c 但我想需求还是在的 xff0c 比如家里的长辈可能就不太会操作点播平台 xff0c 他们比较习惯传统的直播电视 xff0c 再比如新闻
  • 无线 315MHz 433MHz 868MHz 915MHz 频段

    http zhidao baidu com question 555639763 html 一般国内最好使用430 440MZH段 xff0c 如433 92 xff2d xff28 xff3a 是使用最普遍的 xff0c 配套产品齐全 x
  • Kalibr标定时卡在Extracting calibration target corners的问题

    问题 使用Kalibr标定单目相机与单目imu联合标定 xff0c 都出现卡在Extracting calibration target corners的问题 xff0c 因此做一个记录 运行标定命令后一直卡在下面 Initializing
  • 卡尔曼滤波Q、R如何调节?

    转载 xff1a 作者 xff1a 小心假设 链接 xff1a https www zhihu com question 30481204 answer 50092960 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权
  • zynqmp zcu102 arm 裸机UDP

    sdk2017没有udp例程只有tcp例程 以下是调试通的udp例程 xff1a 1 创建lwip测试工程或者在现有工程添加lwip库 2 添加udp代码 xff0c 也可以从tcp例程修改 xff1a int udpinit struct