目錄
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) |