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;
}