zynq Lwip学习笔记-start_application函数

本文详细介绍了在Zynq平台中使用LwIP协议族开发的TCP回声服务器启动函数start_application的过程,包括函数参数、变量定义以及关键函数调用关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在学习zynq中的lwip协议族,找不到很好的记笔记的地方,所以就用csdn记录一下自己的学习过程。现在对lwip不熟悉,只是把官方的lwip echo server例程跑了一下,能跑通就一点点的照着学了,笔记都是根据自己的理解写的,而且部分内容可能也只针对lwip echo server例程有效,笔记可以供有缘人参考,但不敢保证全对,有不对的地方也期待有高人指点一二。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.youkuaiyun.com/weixin_40356705/article/details/136824649

一、概述

  • 原型
int start_application()
  • 参数
  • 作用
    lwip应用函数,完成系统网路应用功能的初始化。在lwip echo server例程中这段代码是一个简单的TCP回声(echo)服务器应用程序的启动函数,用于在指定的端口上监听并响应传入的连接。

二、函数体

int start_application()
{
struct tcp_pcb *pcb;
err_t err;
unsigned port = 7;
//这里定义了三个变量:
//pcb:指向`tcp_pcb`结构的指针,该结构用于存储TCP连接的信息。
//err:用于存储`tcp_bind`函数的返回值,表示错误码。
//port:无符号整数,指定服务器应该监听的端口号,这里设置为7。
pcb = tcp_new_ip_type(IPADDR_TYPE_ANY);
//使用tcp_new_ip_type函数创建一个新的TCP PCB,并指定它可以绑定到任何IP地址类型。
if (!pcb) {
    xil_printf("Error creating PCB. Out of Memory\n\r");
    return -1;
}
//如果pcb为NULL,说明创建PCB时发生了错误(可能是内存不足)。然后,它使用xil_printf函数输出错误消息并返回-1。
err = tcp_bind(pcb, IP_ANY_TYPE, port);
//使用tcp_bind函数将PCB绑定到指定的端口。IP_ANY_TYPE表示PCB可以绑定到任何IP地址。
if (err != ERR_OK) {
    xil_printf("Unable to bind to port %d: err = %d\n\r", port, err);
    return -2;
}
//如果tcp_bind返回的不是ERR_OK,则输出错误消息并返回-2。
tcp_arg(pcb, NULL);
//使用tcp_arg函数设置当回调函数被调用时应该传递的参数。在这里,我们不需要传递任何参数,所以设置为NULL。
pcb = tcp_listen(pcb);
//使用tcp_listen函数使PCB开始监听传入的连接。
if (!pcb) {
    xil_printf("Out of memory while tcp_listen\n\r");
    return -3;
}
//如果tcp_listen返回NULL,则输出错误消息并返回-3。
tcp_accept(pcb, accept_callback);
//使用tcp_accept函数设置当新的连接被接受时应该调用的回调函数。在这里,回调函数是accept_callback。
xil_printf("TCP echo server started @ port %d\n\r", port);
//使用xil_printf函数输出一个消息,告知用户TCP回声服务器已经开始在指定的端口上监听。
return 0;
}

三、调用关系

被main函数调用,调用函数较多,分别调用了tcp_new_ip_type注册新的pcb(申请内存空间),调用tcp_bind绑定端口号·(绑定为7),调用tcp_arg函数绑定参数(此处没有绑定参数),调用tcp_listen使PCB开始监听传入的连接,调用了tcp_accept注册pcb的回调函数为accept_callback。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值