ZLIP從增值版V1.0開始支持在uc/os-II下運行。uc/os-II的多任務機制使得ZLIP的各個套接字能夠在相互獨立的任務中運行,減少了編程的復雜度。
實例程序
打開開發(fā)板文檔“代碼\UseZLIP\UCOSII\ZLIP_UCOS.Uv2”,該工程中包含有uc/os-II部分、ZLIP部分和例子程序socket_test_ucosii.c。在例子程序中實現(xiàn)兩個任務:接收任務和發(fā)送任務。接收任務用于接收PC發(fā)來的文件,發(fā)送任務不斷向PC發(fā)起連接,一旦連接后將每隔1秒鐘向PC發(fā)送數據。由于發(fā)送任務優(yōu)先級高于接收任務,所以只要一秒時間間隔到了,接收任務會被打斷,執(zhí)行發(fā)送任務,發(fā)送完畢后又會執(zhí)行接收任務。
在板子上運行該程序。
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端口監(jiān)聽。板子會在15秒之內連接上SocketTestDlg,連接上后,板子每隔1秒向SocketTestDlg發(fā)送1字節(jié)數據,SocketTestDlg可以接收到該數據,如圖所示:

3. 再運行一個SocketTestDlg實例,向192.168.0.2:1024端口連接。之后使用ClientSend發(fā)送一個文件給開發(fā)板。發(fā)送完畢以后使用ClientClose關閉連接。通過SocketTestDlg輸出的校驗和和串口輸出的校驗和可以確定文件發(fā)送無誤。
4. 觀察第一個SocketTestDlg實例的輸出信息可知在板子接收文件的同時,每隔1秒繼續(xù)向PC發(fā)送數據。
該例子演示了,如何使用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;
}