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 <errno.h>,定義LWIP_ERRNO_STDINCLUDE以包含    <errno.h>或將LWIP_ERRNO_INCLUDE定義爲<errno.h>或等效。
*/ 
#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)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章