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

当前位置:首页 > lwip中各种函数,标志位的总结

lwip中各种函数,标志位的总结

  • 62 次阅读
  • 3 次下载
  • 2025/5/5 11:06:52

mem_init( ) 内存堆的初始化函数,主要是告知内存堆的起止地址,以及初始化空闲表,由lwip 初始化时自己调用,该接口为内部私有接口,不对用户层开放

mem_malloc( ) 申请分配内存。将总共需要的字节数作为参数传递给该函数,返回值是指向最新分配的内存的指针,而如果内存没有分配好,则返回值是NULL

mem_calloc( ) 是对mem_malloc( )函数的简单包装,他有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小,与mem_malloc()不同的是它会把动态分配的内存清零。有经验的程序员更喜欢使用mem_ calloc (), memp_num:这个静态数组用于保存各种类型缓冲池的成员数目 memp_sizes:这个静态数组用于保存各种类型缓冲池的结构大小 memp_tab:这个指针数组用于指向各种类型缓冲池当前空闲节点

memp_init():内存池的初始化,主要是为每种内存池建立链表memp_tab,其链表是逆序的,此外,如果有统计功能使能的话,也把记录了各种内存池的数目。

memp_malloc():如果相应的memp_tab链表还有空闲的节点,则从中切出一个节点返回, 否则返回空。

memp_free()把释放的节点添加到相应的链表memp_tab头上。 系统是调用内存堆分配函数mem_malloc进行内存分配的。分配

空间的大小包括pbuf结构头大小SIZEOF_STRUCT_PBUF,需要的数据存储空间大小length,还有一个offset系统是调用内存堆分配函数mem_malloc进行内存分配的。段区域的offset的大小,这段区域用来存储数据的包头,如TCP包头,IP包头等 pbuf_free(A)函数来删除pbuf结构

PBUF_POOL 类型和PBUF_ROM类型、PBUF_REF类型需要通过memp_free()函数删除,PBUF_RAM类型需要通过mem_free()函数删除

memp_memory是缓冲池的起始地址,前面已有所讨论; MEMP_MAX是POOL 类型数; memp_tab 用于指向某类POOL 空闲链表的起始节点;memp_num表示各种类型POOL的个数;memp_sizes表示各种类型单个POOL的大小,对于MEMP_PBUF_POOL和MEMP_PBUF型的POOL,其大小是pbuf头和pbuf可装载数据大小的总和。

网络接口

在LWIP中,是通过一个叫做netif的网络结构体来描述一个硬件网络接口的 struct netif {

struct netif *next; // 指向下一个netif结构的指针 struct ip_addr ip_addr; // IP 地址相关配置 struct ip_addr netmask;

struct ip_addr gw;

err_t (* input)(struct pbuf *p, struct netif *inp); //调用这个函数可以从网卡上取得一个数据包 err_t (* output)(struct netif *netif, struct pbuf *p, // IP 层调用这个函数可以向网卡发送 structip_addr*ipaddr); //一个数据包

err_t (* linkoutput)(struct netif *netif, struct pbuf *p); // ARP模块调用这个函数向网卡发送一个数据包

void *state; // 用户可以独立发挥该指针,用于指向用户关心的网卡信息

u8_t hwaddr_len; // 硬件地址长度,对于以太网就是MAC地址长度,为6各字节

u8_t hwaddr[NETIF_MAX_HWADDR_LEN]; //MAC 地址

u16_t mtu; // 一次可以传送的最大字节数,对于以太网一般设为1500

u8_t flags; // 网卡状态信息标志位

char name[2]; // 网络接口使用的设备驱动类型的种类 u8_t num; // 用来标示使用同种驱动类型的

不同网络接口 };

output字段向一个函数该函数的三个参数是pbuf类型、netif类型和ip_addr类型,返回参数是err_t类型。其中pbuf代表要发送的数据包。ipaddr 代表网卡需要将该数据包发送到的地址,该地址应该是接收实际的链路层帧的主机的 Ip地址

ethernetif_init底层接口初始化函数

tcpip_input 函数是向IP层递交数据包的函数

netif->next = netif_list; //将初始化后的节点插入链表netif_list netif_list = netif; // netif_list 指向链表头

low_level_init(netif); //底层硬件初始化函数 static void low_level_init(struct netif *netif) {

netif->hwaddr_len = ETHARP_HWADDR_LEN; //设置变量enc28j60的hwaddr_len字段

netif->hwaddr[0] = 'F'; //初始化变量enc28j60的MAC地址 netif->hwaddr[1] = 'O'; //设什么地址用户自由发挥吧,但是不要与其他网络设备的MAC地址重复。

netif->hwaddr[2] = 'R'; netif->hwaddr[3] = 'E';

搜索更多关于: lwip中各种函数,标志位的总结 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

mem_init( ) 内存堆的初始化函数,主要是告知内存堆的起止地址,以及初始化空闲表,由lwip 初始化时自己调用,该接口为内部私有接口,不对用户层开放 mem_malloc( ) 申请分配内存。将总共需要的字节数作为参数传递给该函数,返回值是指向最新分配的内存的指针,而如果内存没有分配好,则返回值是NULL mem_calloc( ) 是对mem_malloc( )函数的简单包装,他有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小,与mem_malloc()不同的是它会把动态分配的内存清零。有经验的程序员更喜欢使用mem_ calloc (), memp_num:这个静态数组用于保存各种类型缓冲池的成员数目 memp_sizes:这个静态数组用于保存各种类型缓冲池的结构大小 memp_tab:这个指针数组用

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价: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