📄 lwipentry.c
字号:
//*------------------------------------------------------------------------------------------------
//* 文件名 : LwIPEntry.c
//* 功能描述 : LwIP入口函数库
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、时间 : 2007/06/24
//* 修改日期、时间 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 头文件 ----------------------------------------------
#include "/uCOS-II/ucos_ii.h"
#include "/LwIP/include/lwip/netif.h"
#include "/LwIP/include/lwip/tcpip.h"
#include "/at91sam7x256/include/AT91SAM7X256.h"
#include "/at91sam7x256/include/lib_AT91SAM7X256.h"
#include "/at91sam7x256/periph/emac/lib_emac.h"
#include "/at91sam7x256/drivers/flash/flash.h"
#include "/tools/search.h"
//*------------------------------------ 变量、数据类型宏定义 --------------------------------------
#define HTTP_PORT 80
//*================================================================================================
//* 函 数 区
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函数名称 : __ilvInitLwIP
//* 功能描述 : 完成LwIP最基本的初始化工作
//* 入口参数 : 无
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
__inline void __ilvInitLwIP(void)
{
extern void memp_init(void);
sys_init();
mem_init();
memp_init();
pbuf_init();
raw_init();
tcpip_init(NULL, NULL);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : __ilvSetLwIP
//* 功能描述 : 设置LwIP,包括添加配置网络接口、建立接收任务等工作
//* 入口参数 : 无
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
__inline void __ilvSetLwIP(void)
{
extern err_t ethernetif_init(struct netif *stNetif);
struct ip_addr __stIpAddr, __stNetMask, __stGateway;
static struct netif __stEMACNetif;
//* 初始化缺省网络接口(即习惯意义上的网卡)及网络接口链表(即netif结构体链表),根据
//* 函数说明,它必须率先被调用
netif_init();
//* 建立并配置EMAC接口
IP4_ADDR(&__stIpAddr,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetIPAddr(0):IP_ADDR_0,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetIPAddr(1):IP_ADDR_1,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetIPAddr(2):IP_ADDR_2,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetIPAddr(3):IP_ADDR_3);
IP4_ADDR(&__stNetMask,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetNetMask(0):NET_MASK_0,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetNetMask(1):NET_MASK_1,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetNetMask(2):NET_MASK_2,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetNetMask(3):NET_MASK_3);
IP4_ADDR(&__stGateway,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetGateway(0):GATEWAY_ADDR_0,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetGateway(1):GATEWAY_ADDR_1,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetGateway(2):GATEWAY_ADDR_2,
(PST_NET_CFG_PARAM->u32Flag == NET_CFG_FLAG)?macGetGateway(3):GATEWAY_ADDR_3);
netif_add(&__stEMACNetif, &__stIpAddr, &__stNetMask, &__stGateway, NULL, ethernetif_init, tcpip_input);
netif_set_default(&__stEMACNetif);
netif_set_up(&__stEMACNetif);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : T_LwIPEntry
//* 功能描述 : LwIP入口任务
//* 入口参数 : <pvArg>[in/out] 保留参数
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
void T_LwIPEntry(void * pvArg)
{
extern void vHandler_HTTP(ST_NETCONN *pstConn);
extern void vHTTPInit(void);
ST_NETCONN *__pstConn, *__pstNewConn;
//* 初始化LwIP
__ilvInitLwIP();
//* 设置LwIP,包括添加配置网络接口、建立接收任务等工作
__ilvSetLwIP();
//* 建立WEB服务器之前先初始化HTTP处理
vHTTPInit();
__pstConn = netconn_new(NETCONN_TCP);
netconn_bind(__pstConn, NULL, HTTP_PORT);
netconn_listen(__pstConn);
while(OS_TRUE)
{
__pstNewConn = netconn_accept(__pstConn);
if(__pstNewConn != NULL)
{
vHandler_HTTP(__pstNewConn);
while(netconn_delete(__pstNewConn) != ERR_OK)
OSTimeDlyHMSM(0, 0, 1, 0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -