zoukankan      html  css  js  c++  java
  • lwip编译选项

    修改默认选项时,不要修改opt.h文件,通过lwipopts.h修改。

    和内存管理以及TCP发送性能相关的选项

    // 为1时使用系统库malloc/free进行内存管理
    #ifndef MEM_LIBC_MALLOC
    #define MEM_LIBC_MALLOC 0
    #endif
    // 使用mem_malloc/mem_free替代pool内存池管理
    // lwip支持使用内存池来管理一些需要经常分配/释放的数据结构
    // 例如pcb
    // 将下面选项置1禁用该特性
    // 一般和MEM_LIBC_MALLOC选项一道使用
    // 使得所有内存分配都通过系统库进行
    #ifndef MEMP_MEM_MALLOC
    #define MEMP_MEM_MALLOC 0
    #endif
    // 使用内存池而不是malloc来分配一般性内存
    // 此选项需要和MEMP_USE_CUSTOM_POOLS一起使用
    #ifndef MEM_USE_POOLS
    #define MEM_USE_POOLS 0
    #endif
    // 用于PBUF_ROM和PBUF_REF的pbuf结构数量
    // 如果程序主要使用零拷贝方式发送大量数据
    // 需要较大数量的该结构
    #ifndef MEMP_NUM_PBUF
    #define MEMP_NUM_PBUF 16
    #endif
    // PBUF内存池(PBUF_POOL类型的PBUF)中的PBUF数量
    #ifndef PBUF_POOL_SIZE
    #define PBUF_POOL_SIZE 16
    #endif
    // TCP发送缓冲区大小(已发出但还未收到ACK的最大允许数据量)
    // 只是设定大小,并不实际分配内存
    // 如果你的程序需要发送大量零拷贝数据
    // 可以将这个值设大一些
    // (因为零拷贝数据“总是在那里”,不占LwIP动态内存)
    // 最小不应小于单次调用tcp_write时可能发送的最大数据量

    // 调用tcp_write时的参数len若大于tpcb->snd_buf将导致返回ERR_MEM
    // (在LwIP代码中,每成功执行一次tcp_write相应减小tpcb->snd_buf,
    // 每收到一次ACK相应增加tpcb->snd_buf)
    // 考虑到一般系统“隔一个确认”的原则,
    // 一般设置为TCP_MSS的2倍或更大的值。
    #ifndef TCP_SND_BUF #define TCP_SND_BUF (2 * TCP_MSS) #endif
    // MEM_SIZE是一般意义上的动态内存大小
    // 如果程序需要进行较大量的拷贝数据发送
    // 则需要较大数量的该内存
    // 因为所有的拷贝发送数据都需要复制到
    // 这种“一般意义”的动态内存中
    // PBUF_RAM类型的PBUF即从中分配
    #ifndef MEM_SIZE #define MEM_SIZE 1600 #endif
    // PBUF内存池中的每个PBUF大小
    // 默认值是能放下一个完整的TCP包(包括下层协议头)
    // 如果你能确定很少接收全长TCP包,可以使用小一点的值
    #ifndef PBUF_POOL_BUFSIZE #define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS+40+PBUF_LINK_HLEN+4/*VLAN_TAG*/+4/*CRC*/) #endif 
    // 在单个pcb中排队的待发pbuf数量上限
    // 不应小于 (2 * TCP_SND_BUF/TCP_MSS)
    // 考虑以下几点:
    // 1. 对于REF/ROM类型的数据,协议头和协议数据是分开存放的,因此每段数据需要两个PBUF
    // 2. LwIP可能会将多次tcp_write中的待发数据合并到一起
    // (如果每次tcp_write数据量都较小)
    // 3. 需要Copy发送的数据,协议头和数据在单一PBUF里面
    // 一般用默认值即可
    #ifndef TCP_SND_QUEUELEN #define TCP_SND_QUEUELEN ((4 * (TCP_SND_BUF) + (TCP_MSS - 1))/(TCP_MSS)) #endif
    // App层发送的超过MSS大小的数据量会被拆分为SEG
    // 每个SEG内数据量不超过MSS
    // 每个SEG可能拥有多个pbuf
    // 不小于TCP_SND_QUEUELEN #ifndef MEMP_NUM_TCP_SEG #define MEMP_NUM_TCP_SEG 16 #endif
  • 相关阅读:
    Java入门学习路线目录索引(持续更新中)
    关于技术面试,面试官会怎么考察?
    什么是REST以及 RESTful?
    程序猿一般可以从什么平台接私活
    Statement常用的方法回顾
    信息网络安全协会学习总结提交规范
    20155322 2017-2018-1 《信息安全系统设计》第五周 MyBash实现
    20155322 2017-2018-1《信息安全系统设计》第五周 学习总结
    2017-2018-1 20155322 20155327 实验一 开发环境的熟悉
    20155322 2017-2018-1《信息安全系统设计》第四周学习总结
  • 原文地址:https://www.cnblogs.com/byeyear/p/3525433.html
Copyright © 2011-2022 走看看