lwip学习笔记

更新时间:2023-10-15 15:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2) sys_thread_new sys_arch_timeouts 相关的三个全局变量如下

struct sys_timeouts lwip_timeouts[LWIP_TASK_MAX];

//为每一个由sys_thread_new创建的任务分配一个存放信号量超时信息的列表 struct sys_timeouts null_timeouts;

//为一个超过任务上限数的任务和不是由sys_thread_new创建的任务取超时列表时返回使用。 MMAC_RTOS_TASK_ID LWIP_TASKS[LWIP_TASK_MAX]; //任务id存放顺序与lwip_timeouts相对应

sys_thread_new用来创建一个新的任务,保存任务ID。sys_arch_timeouts

//就是通过取得任务ID返回任务对应的timeouts结构,从而可以添加、删除和判断超时的功能 /**

* Create a one-shot timer (aka timeout). Timeouts are processed in the * following cases:

* - while waiting for a message using sys_mbox_fetch()

* - while waiting for a semaphore using sys_sem_wait() or sys_sem_wait_timeout() * - while sleeping using the inbuilt sys_msleep() *

* @param msecs time in milliseconds after that the timer should expire * @param h callback function to call when msecs have elapsed * @param arg argument to pass to the callback function */ void

sys_timeout(u32_t msecs, sys_timeout_handler h, void *arg)

sys_timeouts 只是一个指向下一个的sys_timeo的指针

1、InternSocketInit(); //TCP连接初始化

1.1、 lwIPInit(sDevPara.chMACAddr, 0, 0, 0, IPADDR_USE_DHCP);

//! Initializes the lwIP TCP/IP stack. //!

//! \\param pucMAC is a pointer to a six byte array containing the MAC //! address to be used for the interface.

//! \\param ulIPAddr is the IP address to be used (static). //! \\param ulNetMask is the network mask to be used (static). //! \\param ulGWAddr is the Gateway address to be used (static).

//! \\param ulIPMode is the IP Address Mode. \\b IPADDR_USE_STATIC will force //! static IP addressing to be used, \\b IPADDR_USE_DHCP will force DHCP with //! fallback to Link Local (Auto IP), while \\b IPADDR_USE_AUTOIP will force //! Link Local only. //!

//! This function performs initialization of the lwIP TCP/IP stack for the //! Stellaris Ethernet MAC, including DHCP and/or AutoIP, as configured. //!

//! \\return None.

1.1.1、 tcpip_init(lwIPPrivateInit, 0); 这个地方用到了回调函数tcpip_init(void (* initfunc)(void *),

void *arg)

什么是指针函数?函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只

不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。

1.1.1.1、 lwip_init()Perform Sanity check of user-configurable values, and initialize all modules.

1.1.1.2、 sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE,

TCPIP_THREAD_PRIO);

sys_mbox_fetch(sys_mbox_t mbox, void **msg)

调用sys_arch_timeouts();

1.1.1.3、 static void tcpip_thread(void *arg)

1.2 g_sInternVar.TCP_Pcb[0] = tcp_new(); tcp_alloc() struct tcp_pcb * tcp_new(void) {

return tcp_alloc(TCP_PRIO_NORMAL); }

1.2.1、struct tcp_pcb *tcp_alloc(u8_t prio)

1.2.1.1 pcb = memp_malloc(MEMP_TCP_PCB);//获取一个pcb空间

如果pcb为空,试着关闭一个最老的正在时间等待的连接,然后再次分派空间 如果还为空,试着关闭活动连接比这个新的优先级低,再次分配空间 分配后给pcb进行初始化。。。一大堆结构体参数

/* the TCP protocol control block */

1.2.1.。。。。pcb返回给tcp_new,返回给g_sInternVar.TCP_Pcb[0]

1.3 tcp_bind(g_sInternVar.TCP_Pcb[0], IP_ADDR_ANY, 32322); /**绑定 本地IP地址和端口

* Binds the connection to a local portnumber and IP address. If the * IP address is not given (i.e., ipaddr == NULL), the IP address of * the outgoing network interface is used instead. *

* @param pcb the tcp_pcb to bind (no check is done whether this pcb is * already bound!)

* @param ipaddr the local ip address to bind to (use IP_ADDR_ANY to bind * to any local address * @param port the local port to bind to * @return ERR_USE if the port is already in use * ERR_OK if bound */

1.4 addr = lwIPLocalIPAddrGet();

本文来源:https://www.bwwdw.com/article/3lhf.html

Top