LWIP手记【A】PUBF-1
来源:互联网 发布:淘宝发布宝贝数量 编辑:程序博客网 时间:2024/05/23 01:15
pubf是LIWP的一个很重要的部分。也是应该彻底理解的部分。花很多时间在这上面是值得的。和MEM、memp都有联系,所以比较难弄。现在觉得弄懂了这部分,那么LWIP基本上就真正入门了。打算自己编写些例子来理解PBUF。看看LWIP源码里面都用到哪些招数和所谓技巧。总之,对自己有信心最重要,坚持坚持再坚持。
在LWIP源代码文件目录说:
pbuf.c包含协议栈内核使用的数据包管理函数,用于协议栈层次间的数据传递,避免数据拷贝
数据考虑确实是比较花时间和内存的。我自己写程序也发现了这点,尤其是初上电那一把,基本把所有路径走一遍,花费的时间超出我的想象。LWIP想用在各种实时场合(包括adam当初弄得棒球传感器),速度要求快。因此pbuf.C的引入肯定是不得已而为之,带来的问题就是可读性比较差,程序的结构也会受到摧残,但是由于协议本身是固定不变的,所以可读性变得并不那么重要。这是我目前的理解。
(1)在memp.C里,作者展示各个奇技淫巧,as follows:
static const u16_t memp_num[MEMP_MAX] = {#define LWIP_MEMPOOL(name,num,size,desc) (num),#include "lwip/memp_std.h"};
MEMP_MAX的值有点意思,在memp.h, 如下:
typedef enum {#define LWIP_MEMPOOL(name,num,size,desc) MEMP_##name,#include "lwip/memp_std.h" MEMP_MAX} memp_t;这是利用C给enum的成员设置个默认值。比如写个代码,
typedef enum { a1, a2, a3, a4, max} memp;memp a;int main(void){ a = max;
}那么 a = 4.
当然,如果这样搞,给某些成员手动设置值
typedef enum { a1, a2, a3=3, a4=1, max} memp;memp a;int main(void){ a = max;}那么a = 2.
所以想LWIP源码中想用这个技巧,就得我们不手动设置值,而让编译器自动分配值。
0 0
- LWIP手记【A】PUBF-1
- LWIP手记【A】memp-1
- LWIP手记【A】gnetif
- LWIP手记【A】arp杂谈
- LWIP手记【A】arp胡思乱想
- LWIP手记【A】arp高速缓冲区清零
- LWIP手记【A】arp流程之2
- LWIP手记【A】udp连续发送为啥不成功
- LWIP手记【A】arp流程之典型情况一
- lwip【1】LwIP移植心得
- LwIP 入门(1)
- lwip实验1
- Lwip ARP分析(1)
- lwip
- lwip
- LWIP
- 手记1
- 手记1
- 如何选择类型
- Calculus on Computational Graphs: Backpropagation(计算图表的微积分:反向传播)
- 周有光先生的生平影集
- iOS应用开发基础(二)基础知识
- 算法(1)--五种常见的算法思想简述
- LWIP手记【A】PUBF-1
- 3D射线拾取算法揭秘
- 实现一个容器视图控制器(上)
- minigui触摸屏校准及界面程序
- Java程序员面试基本题型
- 老王讲设计模式(三)——单例模式
- LeetCode 361. Boom Enemy
- JavaScript开发者该知道的setTimeout秘密
- 反向代理与 Real-IP 和 X-Forwarded-For