lwIP TCP/IP 协议栈笔记之三: 配置文件 per.h & cc.h 详解

目录

1. per.h(性能测试)

2. cc.h(cpu和compiler配置)

宏定义

非标准函数


1. per.h(性能测试)

在opt.h配置中,LWIP_PERF 选项,控制性能测试,当需要启用这个功能做一些相关的配置工作。

所有与此部分相关的定义都不能放在lwipopts.h中,而是放在 arch/perf.h 中! 在整个lwip中进行测量调用,这些调用可以定义为空。

  •      PERF_START:开始测量某事。
  •      PERF_STOP(x):停止测量某些东西,并记录结果。

per.h 既可新建亦可从官方例程中获取,然后修改成适合自己的内容。

很多情况下,是不使用此功能,仅仅把文件添加进来,直接定义为空就可以了,无论最后有没有使用该功能,其实都没有改变;当然,如果实际需要测量性能,那就需要实现相应的启/停、记录等功能。

#ifndef LWIP_ARCH_PERF_H
#define LWIP_ARCH_PERF_H

/* 定义为空 */
#define PERF_START    
#define PERF_STOP(x) 

#endif /* LWIP_ARCH_PERF_H */

2. cc.h(cpu和compiler配置)

因配置不是 lwIP 本身的选项,且都是与cpu和编译器相关,故此,都放置到cc.h文件,老的版本还有个cpu.h,新版本已经不需要了。相关配置及功能参考 arch.h 和 def.h。

cc.h 既可新建亦可从官方例程中获取,然后修改成适合自己的内容。放置于perf.h相同目录,/arch/cc.h。因为协议栈使用中包含的是目录,因此,不能写成其他,不然,画蛇添足。

  • 宏定义

/* 
    定义系统的字节顺序。 需要将网络数据转换为主机字节顺序。 
    允许的值:LITTLE_ENDIAN和BIG_ENDIAN */
#define 	BYTE_ORDER   LITTLE_ENDIAN

/* 定义系统的随机数生成器功能 */ 
#define 	LWIP_RAND()   ((u32_t)rand())

/* 平台特定的诊断输出。 */ 
#define 	LWIP_PLATFORM_DIAG(x)   do {printf x;} while(0)

/* 特定于平台的断言处理。 */  
#define 	LWIP_PLATFORM_ASSERT(x)

/* 标准C库 是否包含 stddef.h ,默认使用标准库 */ 
#define 	LWIP_NO_STDDEF_H   0

/* 标准C库 是否包含 stdint.h ,默认使用标准库 */  
#define 	LWIP_NO_STDINT_H   0

/* 标准C库 是否包含 inttypes.h ,默认使用标准库 */  
#define 	LWIP_NO_INTTYPES_H   0

/* 标准C库 是否包含 limits.h ,默认使用标准库 */  
#define 	LWIP_NO_LIMITS_H   0

/* 标准C库 是否包含 ctype.h ,默认使用标准库 */  
#define 	LWIP_NO_CTYPE_H   0
 
#define 	LWIP_CONST_CAST(target_type, val)   ((target_type)((ptrdiff_t)val))
 
#define 	LWIP_ALIGNMENT_CAST(target_type, val)   LWIP_CONST_CAST(target_type, val)
 
#define 	LWIP_PTR_NUMERIC_CAST(target_type, val)   LWIP_CONST_CAST(target_type, val)
 
#define 	LWIP_PACKED_CAST(target_type, val)   LWIP_CONST_CAST(target_type, val)

/* 分配指定大小的内存缓冲区,其大小足以使用LWIP_MEM_ALIGN对齐其起始地址。 */ 
#define 	LWIP_DECLARE_MEMORY_ALIGNED(variable_name, size)   u8_t variable_name[LWIP_MEM_ALIGN_BUFFER(size)]

/*     
    计算对齐缓冲区的内存大小 - 返回MEM_ALIGNMENT的下一个最高倍数
   (例如,LWIP_MEM_ALIGN_SIZE(3)和LWIP_MEM_ALIGN_SIZE(4)将为MEM_ALIGNMENT == 4产生4)。
 */ 
#define 	LWIP_MEM_ALIGN_SIZE(size)   (((size) + MEM_ALIGNMENT - 1U) & ~(MEM_ALIGNMENT-1U))

/* 使用未对齐类型作为存储时,计算对齐缓冲区的安全内存大小。 这包括开始时的(MEM_ALIGNMENT  -  1)安全边际 */ 
#define 	LWIP_MEM_ALIGN_BUFFER(size)   (((size) + MEM_ALIGNMENT - 1U))

/* 将内存指针以MEM_ALIGNMENT定义的对齐方式对齐,以使ADDR%MEM_ALIGNMENT == 0 */ 
#define 	LWIP_MEM_ALIGN(addr)   ((void *)(((mem_ptr_t)(addr) + MEM_ALIGNMENT - 1) & ~(mem_ptr_t)(MEM_ALIGNMENT-1)))


/* 打包结构支持。 在声明打包结构之前放置BEFORE。 */ 
#define 	PACK_STRUCT_BEGIN

/* 打包结构支持。 在声明打包结构之前放置AFTER 。 */ 
#define 	PACK_STRUCT_END

/* 打包结构支持。 放置在打包结构的声明结束和尾随分号之间。 */ 
#define 	PACK_STRUCT_STRUCT

/* 打包结构支持。 封装u32_t和u16_t成员。 */ 
#define 	PACK_STRUCT_FIELD(x)   x

/* 打包结构支持。 包含u8_t成员,其中一些编译器警告说不需要打包。 */ 
#define 	PACK_STRUCT_FLD_8(x)   PACK_STRUCT_FIELD(x)

/* 打包结构支持。 包装结构本身的成员,一些编译器警告不必包装。 */ 
#define 	PACK_STRUCT_FLD_S(x)   PACK_STRUCT_FIELD(x)

/*
    PACK_STRUCT_USE_INCLUDES == 1:在打包struct之前和之后使用#include文件支持打包结构。
    该文件包含在结构为“arch / bpstruct.h”之前。
    该结构为“arch / epstruct.h”后包含的文件。
*/ 
#define 	PACK_STRUCT_USE_INCLUDES

/* 消除有关未使用参数的编译器警告 */ 
#define 	LWIP_UNUSED_ARG(x)   (void)x

/* 
    LWIP_PROVIDE_ERRNO == 1:让lwIP提供ERRNO值和'errno'变量。 
    如果禁用此选项,cc.h必须定义'errno',include ,定义LWIP_ERRNO_STDINCLUDE以包含    或将LWIP_ERRNO_INCLUDE定义为或等效。
*/ 
#define 	LWIP_PROVIDE_ERRNO
  • 非标准函数

lwIP为非标准函数提供默认实现。 如果需要,可以将这些映射到OS功能以减少代码占用空间。

char *  lwip_strnstr (const char *buffer, const char *token, size_t n)
 
int  lwip_stricmp (const char *str1, const char *str2)
 
int  lwip_strnicmp (const char *str1, const char *str2, size_t len)
 
void  lwip_itoa (char *result, size_t bufsize, int number)

 

 

你可能感兴趣的:(LWIP,TCP/IP,嵌入式开发)