基于μC/OS-Ⅲ的LwIP协议栈的移植与实现(3)
- UID
- 1029342
- 性别
- 男
|
基于μC/OS-Ⅲ的LwIP协议栈的移植与实现(3)
2 测试
测试工作使用LM3S9B95嵌入式平台作为TCP客户端,一台PC作为TCP主机端。测试程序中,嵌入式平台的IP地址设为172.21.28.250,主机IP为172.21.28.253,端口为1020。测试程序中创建了两个任务:一个是LwIP主线程,一个是测试任务。LwIP主线程处理以太网协议的数据包,测试任务负责接收主机端的数据并回传至主机端。
测试任务首先初始化底层硬件和协议栈,包括使能LM3S9B95以太网硬件模块和中断、调用协议栈内核初始化函数tcpip_init()、初始化网络接口的结构体。
void My_LwIP_Init(void)
{
/* 调用StellarisWare库函数进行硬件初始化 */
……
/* 调用内核初始化函数 */
tcpip_init();
/* 初始化netif,设置本机的IP、子网掩码、网关,绑定netif的回调函数 */
netif_add(……);
netif_set_default(……);
netif_set_up(……);
}
第二步是初始化客户端。首先创建一个网络连接结构体,再将其绑定至端口并连接到指定的服务器。
void TCP_Client_Init(void)
{
pstNetconn = netconn_new(NETCONN_TCP); //新建连接
netconn_bind(……); //绑定端口
netconn_connect(……); //连接主机
}
任务的主循环中调用了LwIP具有进程阻塞功能的函数netconn_recv()以接收来自主机的数据。若数据接收正确,则将数据发送回主机端的PC;若接收不正确,则删除当前的连接,重新连接到主机。
while(1)
{
err = netconn_recv(……); // 接收数据
if(err == ERR_OK) // 数据正确
{
netconn_write(……); // 发送数据
netbuf_delete(……); // 删除数据缓冲区
}
else
{
netconn_delete(……); // 删除当前连接
/* 重新连接 */
……
}
}
PC主机端使用了铭心软体工作室的网络调试助手,通过该软件向LM3S9B95客户端发送测试数据,客户端的回传数据也在该软件内显示。测试结果如图2所示。
LwIP是一款专为嵌入式系统设计的以太网协议栈,具有占用资源小、基本功能完备和便于移植等特点。其拥有很高的通用性,适用于多种嵌入式操作系统和硬件平台[6]。在运行实时操作系统的应用环境中,移植工作要求开发者实现操作系统模拟层和硬件驱动层两个部分。协议栈的主进程可作为实时操作系统的一个任务,完整地执行网络通信功能。μC/OS-Ⅲ是μC/OS系列的最新产品,同样是一款实时操作系统的内核,并不具备网络通信功能。LwIP移植到μC/OS-Ⅲ中,可使得运行该实时内核的嵌入式终端拥有网络通信功能,符合当今产品发展的趋势,具有更广泛的应用领域和更高的市场价值。 |
|
|
|
|
|