板子自带的TCPIP协议栈ZLG-TCPIP的性能可以说一般,代码质量也不高,而且采用的是查询而不是中断方式.不过初学TCPIP研究一下相比其他复杂的协议栈还是容易点.
这里就简单描述下ADS移植到IAR的过程,因为改动的代码并不多,就不详细介绍了.关于ZLG-TCPIP更深入的介绍可以参考《ARM嵌入式系统软件开发实例(一)》,之后会详细介绍LwIP的移植过程以及网卡驱动
可以到http://download.csdn.net/source/1547554下载到该工程的源代码,之后有少许改动,不过并不影响运行,如果需要可以与我联系,共同探讨.
1.移植过程很简单,把ADS中的ZLG-TCPIP文件夹复制到IAR下,在工程中添加其中的代码,在app.c中创建相应uCOSII任务.实现数据类型等的定义.编译有错误会提示你进行查漏补缺.
2.在app.c中的App_TaskCreate创建了一个Task_ZLGTCPIP_Init任务,该任务进行ZLG-TCPIP的初始化,网卡的初始化,ZLG-TCPIP任务和测试任务的创建,最后不停进行网卡数据包的查询.
Task_ZLGTCPIP_Init:
Rec_Packet()从网卡接收到数据包后,会调用Rec_Ethernet_Packed进行数据包的分析,判断是ARP还是IP包,如果是IP包送到IP_PROCESS处理,并判断出是ICMP/TCP/UDP包,如果是ICMP包就icmp_process,如果是TCP/UDP则发送信号量有TaskC和TaskB进行处理
4.TaskB和TaskC, TaskB和TaskC等待到IP_PROCESS发送的信号量后就交由UDP/TCP层去处理.对应的函数为Udp_Process和Process_Tcp1
TaskB:
TaskC:
5.ping的效果并不理想,因为采用的是查询方式,后来用LwIP采用中断的方式可以达到2-3ms
关于另一个ZLG例子-ZLGGUI可以在http://download.csdn.net/source/1599837下到IAR的工程,ZLG-GUI功能比较简单,就不深入研究了,将来可以好好研究下MiniGUI和uC-GUI