云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > LWIP的底层结构

LWIP的底层结构

  • 62 次阅读
  • 3 次下载
  • 2025/5/30 16:01:11

对了,accept函数中从mbox中获取的连接就是这里放进去的。

再回到accept中来,取得了新的连接,接下来就是分配sock了,再然后,再然后?再

然后就等用户来使用接收、发送数据了。

到此整个APP层,也就是传输层以上对socket的封装讲完了。在最后再总结一些整个

路径的调用情况吧

二.LWIP之API_MSG结构及其实现

2009-5-11 LWIP之API_MSG结构及其实现

从上面一篇的socket实现来看,如果要评起到最关键作用的一个结构体,那么struct

api_msg当之无愧。先看下它的定义:

/** This struct contains a function to execute in another thread context and a struct api_msg_msg that serves as an argument for this function.

This is passed to tcpip_apimsg to execute functions in tcpip_thread context. */

struct api_msg {

/** function to execute in tcpip_thread context */ void (* function)(struct api_msg_msg *msg); /** arguments for this function */ struct api_msg_msg msg; };

功能说的很清楚。但是具体怎么个操作法还是不知道,没关系,接着看它的调用。

举一个例子,刚好是上一篇中调用,但是没有看具体实现的

err_t netconn_getaddr(struct netconn *conn, struct ip_addr *addr, u16_t *port, u8_t local) {

struct api_msg msg;

msg.function = do_getaddr; msg.msg.conn = conn;

msg.msg.msg.ad.ipaddr = addr; msg.msg.msg.ad.port = port; msg.msg.msg.ad.local = local; TCPIP_APIMSG(&msg);

return conn->err; }

说明一下,api_msg结构几乎都是在netconn_xxx函数中被调用,方式千篇一律,除了msg.funcion的赋值不一样外。上面的调用很简单,对该结构体变量赋值,接着就是调用TCPIP_APIMSG,这个函数上面讲过,可过去看下。既然如此,就不得不说mbox及其相关函数了。

static sys_mbox_t mbox = SYS_MBOX_NULL;【tcp.c】 再看sys_mbox_t的定义,在【src\\include\\lwip\\sys.h】中

/* For a totally minimal and standalone system, we provide null definitions of the sys_ functions. */ typedef u8_t sys_sem_t; typedef u8_t sys_mbox_t; typedef u8_t sys_prot_t;

可以看到这里只是简单的定义成了u8类型,注意上面的红色字体的说明,很明显这个是可移植的一部分,需要根据不同的平台,不同的操作系统具体定义。可以借鉴焦海波大侠的关于ucos上对lwip的移植笔记来看。

我们可以看到在api_msg结构的处理过程中,所有的信息都是包含在api_msg_msg结构

体中的,api_msg只是将其和function简单的组合了。下面看下这个牛结构的定义: /** This struct includes everything that is necessary to execute a function for a netconn in another thread context (mainly used to process netconns in the tcpip_thread context to be thread safe). */ struct api_msg_msg {

/** The netconn which to process - always needed: it includes the semaphore which is used to block the application thread until the function finished. */

struct netconn *conn;

/** Depending on the executed function, one of these union members is used */ union {

/** used for do_send */ struct netbuf *b;

/** used for do_newconn */ struct { u8_t proto;

搜索更多关于: LWIP的底层结构 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

对了,accept函数中从mbox中获取的连接就是这里放进去的。 再回到accept中来,取得了新的连接,接下来就是分配sock了,再然后,再然后?再然后就等用户来使用接收、发送数据了。 到此整个APP层,也就是传输层以上对socket的封装讲完了。在最后再总结一些整个路径的调用情况吧 二.LWIP之API_MSG结构及其实现 2009-5-11 LWIP之API_MSG结构及其实现 从上面一篇的socket实现来看,如果要评起到最关键作用的一个结构体,那么struct api_msg当之无愧。先看下它的定义: /** This struct contains a func

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com