ZLIP从增值版V1.0开始支持在uc/os-II下运行。uc/os-II的多任务机制使得ZLIP的各个套接字能够在相互独立的任务中运行,减少了编程的复杂度。
实例程序
打开开发板文档“代码\UseZLIP\UCOSII\ZLIP_UCOS.Uv2”,该工程中包含有uc/os-II部分、ZLIP部分和例子程序socket_test_ucosii.c。在例子程序中实现两个任务:接收任务和发送任务。接收任务用于接收PC发来的文件,发送任务不断向PC发起连接,一旦连接后将每隔1秒钟向PC发送数据。由于发送任务优先级高于接收任务,所以只要一秒时间间隔到了,接收任务会被打断,执行发送任务,发送完毕后又会执行接收任务。
在板子上运行该程序。
1. 串口提示:
start
TODO:Peer TCP should listen at 192.168.0.3:1024
peer connect to 192.168.0.2:1024 at any timeand send big data.
2. 打开SocketTestDlg程序,Send mode选择Send Message,并在1024端口监听。板子会在15秒之内连接上SocketTestDlg,连接上后,板子每隔1秒向SocketTestDlg发送1字节数据,SocketTestDlg可以接收到该数据,如图所示:
3. 再运行一个SocketTestDlg实例,向192.168.0.2:1024端口连接。之后使用ClientSend发送一个文件给开发板。发送完毕以后使用ClientClose关闭连接。通过SocketTestDlg输出的校验和和串口输出的校验和可以确定文件发送无误。
4. 观察第一个SocketTestDlg实例的输出信息可知在板子接收文件的同时,每隔1秒继续向PC发送数据。
该例子演示了,如何使用ZLIP和uc/os-II同时运行两个独立的通信任务。
程序部分代码
main()
{
struct zlip_addr_info xdata addr_info=
{
ETHER_ADDR,
IPAddr,
NetMask,
GateWay
};
ZLIP_Init(&addr_info);
OSInit();
printf("\nstart");
OSTaskCreate(Task_recv, (void xdata *)0, &Task_recv_stack[0],3);
OSTaskCreate(Task_send, (void xdata *)0, &Task_send_stack[0],2);
OSStart();
ZLIP_Release();
return TRUE;
}