本文整理 LwIP 移植至嵌入式平台時的關鍵巨集定義與介面實作片段,供快速參考。
#define U16_F "hu" #define S16_F "hd" #define X16_F "hx" #define U32_F "lu" #define S32_F "ld" #define X32_F "lx" #define SZT_F "uz" #define BYTE_ORDER LITTLE_ENDIAN
#define PACK_STRUCT_BEGIN __packed #define PACK_STRUCT_STRUCT #define PACK_STRUCT_END #define PACK_STRUCT_FIELD(fld) fld #define ALIGNED(n) __align(n)
#define PERF_START /* null definition */ #define PERF_STOP(x) /* null definition */
typedef struct sys_sem sys_sem_t; #define SYS_SEM_NULL NULL #define sys_sem_valid(sema) (((sema) != NULL) && ((sema)->sem != NULL)) #define sys_sem_set_invalid(sema) ((sema)->sem = NULL) // 建立、釋放、等待、發送信號量需依平台實作 // sys_sem_new, sys_sem_free, sys_arch_sem_wait, sys_sem_signal
// 低層初始化
err_t low_level_init(struct netif *netif) {
// 設定 MAC、MTU、旗標等
}
// 低層發送
err_t low_level_output(struct netif *netif, struct pbuf *p) {
// 遍歷 pbuf 鏈表發送
}
// 低層接收
struct pbuf *low_level_input(struct netif *netif) {
// 從硬體讀取封包組裝 pbuf
}
err_t ethernetif_init(struct netif *netif) {
// 註冊 linkoutput、input 等回呼
}
void tcpip_init_done(void *arg) {
// 建立 netif、設定 IP/Netmask/GW
// netif_add, netif_set_up, netif_set_default
// 建立接收執行緒
}
附件下載:LwIP 移植完整專案碼