目录
1. lwIP添加到工程
2. 添加文件
3. 修改网卡驱动
4. 协议栈初始化
5. 例程
LwIP 不仅能在裸机上运行,也能在操作系统环境下运行,而且在操作系统环境下,用户能使用NETCONN API 与Socket API 编程,相比RAW API 编程会更加简便。操作系统环境下,这意味着多线程环境,一般来说LwIP 作为一个独立的处理线程运行,用户程序也独立为一个/多个线程,这样子在操作系统中就相互独立开,并且借助操作系统的IPC 通信机制,更好地实现功能的需求。
LwIP 在设计之初,设计者无法预测LwIP 运行的环境,如果LwIP 要运行在操作系统环境中,那么就必须产生依赖,即LwIP 需要依赖操作系统自身的通信机制,如信号量、互斥量、消息队列(邮箱)等,所以LwIP 设计者在设计的时候就提供一套与操作系统相关的接口,由用户根据操作系统的不同进行移植,这样子就能降低耦合度,让LwIP 内核不受其运行的环境影响,因为往
往用户并不能完全了解内核的运作,所以只需要用户在移植的时候对LwIP 提供的接口根据不同操作系统进行完善即可。
比较简单,与上节提到的无操作系统步骤类似,不做赘述
添加通用文件 lwipopts.h、cc.h、pref.h,
添加系统需要文件sys_arch.h 和 sys_arch.c, 实现系统抽象层相关功能,具体实现见之前的文章:
https://blog.csdn.net/XieWinter/article/details/98781176
懒得编写,官方有现成的例子,可以直接拷贝使用,至于关于freertos配置需要合适
contrib-2.1.0\ports\freertos
参考contrib-2.1.0\examples\ethernetif 修改。
参考https://blog.csdn.net/XieWinter/article/details/99544178
本质来讲,就是从让数据的收发,从无操作系统的轮询模式,切换到受IPC控制的多任务。
使用LwIP,那就必须先将协议栈初始化,我们就创建一个函数,在函数中初始化协议栈,注册网卡,设置主机的IP 地址、子网掩码、网关地址等。
void TCPIP_Init(void)
{
tcpip_init(NULL, NULL);
/* IP addresses initialization */
/* USER CODE BEGIN 0 */
#ifdef USE_DHCP
ip_addr_set_zero_ip4(&ipaddr);
ip_addr_set_zero_ip4(&netmask);
ip_addr_set_zero_ip4(&gw);
#else
IP4_ADDR(&ipaddr,IP_ADDR0,IP_ADDR1,IP_ADDR2,IP_ADDR3);
IP4_ADDR(&netmask,NETMASK_ADDR0,NETMASK_ADDR1,NETMASK_ADDR2,NETMASK_ADDR3);
IP4_ADDR(&gw,GW_ADDR0,GW_ADDR1,GW_ADDR2,GW_ADDR3);
#endif /* USE_DHCP */
/* USER CODE END 0 */
/* Initilialize the LwIP stack without RTOS */
/* add the network interface (IPv4/IPv6) without RTOS */
netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
/* Registers the default network interface */
netif_set_default(&gnetif);
if (netif_is_link_up(&gnetif))
{
/* When the netif is fully configured this function must be called */
netif_set_up(&gnetif);
}
else
{
/* When the netif link is down this function must be called */
netif_set_down(&gnetif);
}
/* USER CODE BEGIN 3 */
/* USER CODE END 3 */
}
注意:
tcpip_init(NULL, NULL);
netif_add(&gnetif, &ipaddr, &netmask, &gw, NULL, ðernetif_init, &tcpip_input);
ping 测试基本响应
工程链接:https://download.csdn.net/download/xiewinter/11596792